7
votes

Annotation Cartographie des bidirectionnelles OneTomanany / MétéoTone ne récupère pas?

Je me lance clairement pour comprendre cela, donc aidez grandement apprécié ...

J'ai le mappage suivant: p> xxx pré>

dans mon dB j'ai: p> xxx pré>

Cependant, p> xxx pré>

retourne null. p>

Peut-être que quelqu'un peut voir ce que j'ai manqué? P >

merci, p. p>

edit strong> p>

Il semble être plus de plus à faire avec l'état de la session en ce que la collection n'est pas renseignée dans Le contexte de la même session, mais la collection est remplie dans la prochaine session ... p>

Considérez les éléments suivants: P>

DEBUG - existing not just added: parent id: 13, Children is size:1
DEBUG - new one before commit: parent id: 23, Children is null
DEBUG - new one after commit: parent id: 23, Children is null
DEBUG - new one after re-fetch: parent id: 23, Children is null


2 commentaires

Avez-vous des informations utiles lorsque vous regardez les données de débogage Hibernate?


S'il vous plaît voir Modifier. BTW DB est Postgres, je suis également dans un environnement de tapisserie à l'aide du module Tapestry-Hibernate.


4 Réponses :


0
votes

Dans votre question initiale, cela impliquait que les données existaient déjà dans la base de données avant d'ouvrir la session, c'était une information essentielle pour savoir que vous l'enregistrez dans la même session ...

Voici l'hibernate officiel Conseils sur ce sujet à la manière suivante: (Pris de http://community.jboss.org/wiki/hibernatefaq-commonproblèmes ) p>

J'ai des problèmes avec une association bidirectionnelle. strong> p>

Lorsque vous mettez à jour une association bidirectionnelle, vous devez mettre à jour les deux extrémités. P>

parent.getChildren().add(child);
child.setParent(parent);


1 commentaires

Le fait que c'est une liste est hors de propos. De plus, si getchildren () renvoie null, alors un parent est chargé avec succès, la lecture de la base de données semble donc fonctionner.



1
votes

Ajout d'un attribut cascade dans le cadre de votre entité onetomany dans l'entité parent peut résoudre le problème.

ParentEntity parent = new ParentEntity();

ChildEntity child = new ChildEntity();
child.setParent(parent);
parent.getChildren().add(child);
session.save(parent);


1 commentaires

Correct, mais pas le problème ici :)



2
votes

Oui, STIT ne déclenche pas l'actualisation du cache de session.

L'approche typique ici consiste à utiliser le modèle de session-per-demande, de sorte que vous fermez la session immédiatement après commettre et ouvrez une autre session pour ce qui suit. Transactions (bien que ce ne soit pas une option si vous utilisez Session ouverte dans le modèle de vue ).

Une autre bonne pratique qui peut aider à résoudre ce problème est de modifier simultanément les deux côtés de la relation bidirectionnelle: xxx

de cette façon, vous pouvez conserver des objets dans le cache de session dans la cohérence Etat.

Enfin, si vous devez réellement rafraîchir un objet à l'intérieur d'une session, vous pouvez appeler session.refresh () dessus.


0 commentaires

0
votes

La solution que j'utilise pour le moment est Pour initialiser la collection manuellement pendant la construction:

private List<ChildEntity> children 
    = new ArrayList<ChildEntity>;


0 commentaires