2010-04-07 3 views
0

J'ai deux Entités, "Parent" et "Enfant", qui sont liées par un bidirectionnel un-à- de nombreuses relations avec l'attribut de cascade défini sur "tous". Lorsque vous ajoutez un objet enfant aux enfants de parents collection en utilisant le code ci-dessous, je ne peux pas obtenir l'ID de l'enfant a perduré jusqu'à i valider la transaction:Récupère l'ID d'un enfant dans une relation cascade = "all", tout en l'ajoutant à une collection, dans Hibernate

Parent p = (Parent) session.load(Parent.class, pid); 
Child c = new Child(); 
p.addChild(c); 
// "c" hasn't an ID (is always zero) 

Cependant, quand je persiste une entité enfant par explicitement appelant la méthode, l'ID est créé et mis immédiatement, même si la transaction session.save() n'a pas été commise:

Child c = new Child(); 
session.save(c); 
// "c" has an ID 

est-il un moyen d'obtenir l'ID de l'entité enfant immédiatement sans appeler le méthode session.save()?

Merci

Répondre

1

Cela dépend en fait du système d'identification que vous utilisez.

Si vous utilisez des champs d'incrémentation automatique (par exemple, MySQL, SQL Server), l'ID ne sera pas créé tant que l'entité n'aura pas été enregistrée .

Si vous utilisez des séquences (par exemple Oracle), l'ID sera créé lorsque l'entité est persistante.

Je suppose alors que vous avez un champ d'incrément automatique auquel cas la réponse est: non, vous ne pouvez pas obtenir un ID sans le persister. Cela étant dit, vous ne devriez pas besoin cette ID la plupart du temps. Les relations avec d'autres entités sont traitées implicitement. Je suppose alors que vous voulez l'ID pour une sorte de paramètre d'URL ou un champ de formulaire? Quoi qu'il en soit, oui, vous devrez l'enregistrer.

Questions connexes