Hibernate jette violation de contrainte d'unicité exception lors de la mise à jour de champ une partie de la clé unique
Ci-dessous est le cas d'utilisation:
J'ai un unique index défini sur 3 colonnes-dire A,B,C. Assumer les valeurs sont A1,B1,C1.
Mon code java est l'ajout d'un nouvel enregistrement dire A1,B1,C1, mais avant cet enregistrement est ajouté, je l'ai mise à jour de la précédente valeur de C1 à C2. Tout en essayant d'ajouter le nouvel enregistrement (après la mise à jour), hibernate est de lancer une violation de contrainte d'unicité d'exception. Aucune raison pour expliquer pourquoi il le fait? Toutes les déclarations ci-dessus sont exécutées dans la même transaction. Mon hypothèse, c'est l'insert qui se passe avant la mise à jour et c'est la raison de l'exception.
Des idées/suggestions ?
OriginalL'auteur Cshah | 2010-08-19
Vous devez vous connecter pour publier un commentaire.
Essayez d'utiliser de la session.flush() après la mise à jour.
Je n'ai jamais eu de problèmes avec cela. Je ne me souviens plus spécifiquement comment il fonctionne et de quelle ne, mais vous pouvez trouver des explications sur la Persistance Java avec Hibernate (c'est là que j'ai découvert la première fois que j'ai essayé de le faire).
OriginalL'auteur Rafael
C'est comment Hibernate se comporte de par sa conception, il va insérer les valeurs à
save()
temps (A1, B1, C1) et ensuite les mettre à jour (C1 à C2), il ne sera pas insérer A1, B1, C2). Citant le Roi dans Insérer et mettre à Jour dans la même chasse:Suggestion: retarder l'enregistrer pour insérer (A1, B1, C2) directement.
Ahhhhhh, vous n'êtes pas la mise à jour de la "nouvelle" d'enregistrement, vous êtes à la mise à jour de l'existant "" un, l'a maintenant. Dans ce cas, utilisez
flush()
en effet de "forcer" la mise à jour arrive.OriginalL'auteur Pascal Thivent