Bonjour,
J'ai un problème assez étrange... J'utilise hibernate et jboss 4.2 GA.
J'ai 3 beans entité:
- Page
- PageElement
- Text
Page représente une page; celle-ci est composé de PageElement (onetomany dans Page).
Text dérive de PageElement (via un JOIN ... une table par entité donc).
Je tente de faire ceci:
- créer une page vide (aucun PageElement lui est associé)
- persist de la page (jusque la, tout va bien)
- ajout d'un Text à la page; pour ce faire, j'utilise ce procédé:
Donc, je crée un Text que je règle, puis je lui ajoute la page (déjà persisté) et je fais pareil avec la page (j'ajoute le Text)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 //link page-text text.setPage(page); page.getElements().add(text); //update page page=documentationEJB.updatePage(page);
- je merge la Page (jusque la, ca va toujours, la page est toujours présente dans la base vu que persisté juste avant, et le text est bien enregistré dans la BD (ainsi que son père, PageElement) et tout est bien lié).
- je re-ajoute un Text à la page
- je refait un merge ... c'est à partir de la que tout déconne...
En refaisant le merge, la Page est toujours bien présente, mais il y a un problème au niveau des Text et des PageElement. En effet, c'est comme si je n'avais pas fait le merge d'avant: hibernate m'a re-créé le premier bean entité Text ... et a ajouté (ce qui est normal) le 2ème...
Donc en gros, je merge avec 1 text en plus (la page est vide au début et après persistence), tout va bien, je rajoute un text et je merge, et la je me retrouve avec 3 text pour la page (le premier étant "pas détecté?" ... il est pourtant déjà présent).
Dans le bean page, j'obiens bien 2 objets Text lié, mais dans la BD je me retrouve avec 3
Voici la table Text .. Ceci correspond à 3 merge visant à ajouter l'un après l'autre, un Text
ID TEXT TYPE
| 29 | AA | p |
| 30 | AA | p |
| 31 | BB | p |
| 32 | AA | p |
| 33 | BB | p |
| 34 | CC | p |
on voit bien l'ordre étrange, il oublie les persist précédant de Text, vraiment étrange...
Je ne sais pas du tout quoi faire, cela me pose un gros problème
Pour info, c'est le bean Page qui contient le OneToMany ainsi que l'annotation mappedBy et aussi le cascade.all ... PageElement ne contient que ManyToOne.
Dans la facade de Page, lors de l'appel à "update", j'utilise simplement "merge" de l'entity manager et rien d'autre...
Merci d'avance pour vos réponse
EDIT: j'utilise mysql-5.0.54 ...
Je suis entrain de me demander si c'est pas un bug dans hibernate ou mysql ...
Note que lors de l'ajout dans Page et Text (code plus haut), je suis hors session et les beans sont donc détaché...
Partager