Si je sauvegarde un objet contenant la liste suivante i obtenir l'exception p> le code dans la pièce! contrôleur ressemble à ceci: p> si j'insère est-ce un bogue hibernate ou est quelque chose qui ne va pas avec mon code? p> p> TaskList.refresh () code> Avant ce bloc, mais les informations de position sont perdues (ce qui conduit à d'autres erreurs). p>
7 Réponses :
Si vous avez besoin de la liste à persister, vous devrez peut-être annoter votre liste avec @onetomanany pour pouvoir persister votre entité. P>
Vous avez raison. J'ai laissé cette annotation pour raccourcir mon exemple - probablement une mauvaise idée.
Le problème était que Hibernate ne prend pas en charge la combinaison de @onetomany (mappeby = ...) code> et @ordordcolumn code>. Sans mappé code> Hibernate utilise une table de jointure et tout fonctionne comme prévu. Voir Explication . p>
Le problème est avec votre jointure Vérifiez si vous n'agissez pas de données qui ne sont pas dans la table p>
Une autre raison de l'exception "org.hibernate.hibernateException: trouvé deux représentations de la même collection" est des getters / setters dupliqués dans l'entité. P>
La même erreur se produit lorsque vous essayez de modifier une collection associée d'un objet. e.g.:
MyObject myObject = myObjectService.get(id);
List<Task> newTasks = //populate new list of Task here
myObject.setTasks(new List<Task>); // or myObject.getTasks().clear();
myObject.getTasks().addAll(newTasks);
myObjectService.merge(myObject);
Pièce aussi, il peut être résolu par: p>
Après de nombreuses heures, j'ai trouvé la solution, j'ai eu le même problème.
J'ai eu une entitélistener avec ce code dans mon app p> ceci causait l'exception dans une collection aléatoire (ou ressemble à) d'une autre entité indépendante qui participait à la même transaction. Je ne connais pas la raison exacte mais ajoutant peut-être que hibernate ne veut pas que vous modifiez l'entité à la main, Mais le champ était un champ transitoire ... p> p> @TransAderal (propagation = propagation.requires_new) code> corrige le problème p>
Je pourrais résoudre le problème en modifiant l'association à paresseux code> et en supprimant la cascade. @OneToMany(mappedBy="taskList", fetch = FetchType.LAZY)
@OrderColumn(name="position", nullable=false)
public List<Task> tasks = new ArrayList<Task>();
Suppression de FETCHTYPE.EAIGER a travaillé pendant tout en conservant le cascadeType.Toutes l'opération.