-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 6 posts ] 
Author Message
 Post subject: Problème de séquence
PostPosted: Tue Dec 19, 2006 12:36 pm 
Newbie

Joined: Tue Dec 19, 2006 12:30 pm
Posts: 3
Location: Paris
Bonjour,

J'ai un problème de séquence.
J'explique mon cas : en fait il réserve un id dans le fichier de mapping hibernate puis dans le trigger donc il en utilise deux.

Voici mon code dans le hbm.xml :

<class name="app.business.ressources.Activites" table="fiche_activite">
<id name="id_fiche" column="id_fiche" type="java.lang.Long" unsaved-value="0">
<generator class="sequence">
<param name = "sequence">S_FICHE_ACTIVITE</param>
</generator>
</id>

<property name="description" column="description" type="java.lang.String"/>
<property name="date_debut" column="date_debut" type="java.lang.String"/>
<property name="date_fin" column="date_fin" type="java.lang.String"/>

<sql-insert>insert into fiche_activite (description, date_debut, date_fin, id_collaborateur, id_projet, id_tache, id_fiche, id_facture)
values (?, to_timestamp(?,'DD/MM/YYYY:HH24:MI'), to_timestamp(?,'DD/MM/YYYY:HH24:MI'), ?, ?, ?, ?, ?)
</sql-insert>



et mon trigger est :

if (:new.ID_FICHE is null) then
select S_FICHE_ACTIVITE.NEXTVAL INTO :new.ID_FICHE from dual;
end if;


le problème est que dans mon trigger qui est en Before insert sur la table concerné, il ne devrait pas rentrer car hibernate a déja appellé la sequence mais pourtant id_fiche est null et ilr apelle la sequence.

si qqun a une idée ;)

merci par avance.


Top
 Profile  
 
 Post subject:
PostPosted: Tue Dec 19, 2006 4:10 pm 
Expert
Expert

Joined: Tue Dec 28, 2004 7:02 am
Posts: 573
Location: Toulouse, France
Si tu as déjà un trigger qui fait le boulot, pourquoi ne pas simplement dire à Hibernate de ne pas appeler la séquence pour valoriser l'id, mais simplement d'aller en lire la valeur après l'insertion ?

_________________
Baptiste
PS : please don't forget to give credits below if you found this answer useful :)


Top
 Profile  
 
 Post subject:
PostPosted: Tue Dec 19, 2006 4:26 pm 
Newbie

Joined: Tue Dec 19, 2006 12:30 pm
Posts: 3
Location: Paris
bonsoir,

merci pr ta réponse.

mais on est obligé de spécifier une sequence lors du mapping d'une table oracle non ?


Top
 Profile  
 
 Post subject:
PostPosted: Tue Dec 19, 2006 5:37 pm 
Expert
Expert

Joined: Tue Dec 28, 2004 7:02 am
Posts: 573
Location: Toulouse, France
Non, pas du tout. Tu peux utiliser le générateur que tu veux. assigned par exemple.

Pour les propriétés, tu peux utiliser pour indiquer l'attribut generated => http://www.hibernate.org/hib_docs/v3/re ... -generated

Cette propriété n'est toutefois pas présente sur le tag <id>, ce qui est à mon avis compréhensible : l'objectif de generated="insert" sur une propriété est de dire à Hibernate : "quand j'insère un tuple de ce type, une fois que c'est fait, tu refais un select sur le tuple pour récupérer la valeur que la base a positionnée". Le problème est évident si Hibernate ne génère pas ou tout simplement ne dispose pas de la clé primaire : si tu insères un tel tuple, comment ferait Hibernate pour le retrouver ?

Donc, à moins de pouvoir désactiver ton trigger, je ne vois a priori pas de solution immédiate à ton problème. La nuit portera peut-être conseil :-).

_________________
Baptiste
PS : please don't forget to give credits below if you found this answer useful :)


Top
 Profile  
 
 Post subject:
PostPosted: Wed Dec 20, 2006 1:04 pm 
Newbie

Joined: Tue Dec 19, 2006 12:30 pm
Posts: 3
Location: Paris
oui effectivement j'ai mais assigned finalement et comme de tte facon il ne le passe pas à oracle ds le triger, il récupere null et apelle la séquence.
c'est un peu de la bidouille mais bon la séquence n'est finalement plus apellé qu'une fois.

merci pour ton aide.


Top
 Profile  
 
 Post subject:
PostPosted: Fri Apr 13, 2007 8:40 am 
Beginner
Beginner

Joined: Thu Dec 23, 2004 5:24 am
Posts: 40
Location: Luxembourg
batmat wrote:
La nuit portera peut-être conseil :-).


J'ai eu un problème similaire et j'ai créé une solution. Voir ici:
http://forum.hibernate.org/viewtopic.php?t=973262

Cet id generator utilise un insert de type:

insert (..., ...) returning primaryKey

Cela permet de retrouver la valeur qui a été insérée par le trigger.


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 6 posts ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.