@GeneratedValue avec la stratégie=GenerationType.AUTO génère répétées de la valeur après le redémarrage
J'ai une hibernate entité avec un ID configuré comme
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Long id;
La création de nouveaux éléments fonctionne bien lors de la première manche. Mais si je redémarre mon application et récupérer en retour les enregistrements, la prochaine fois que j'essaie de persister cette entité, hibernate essaie d'utiliser le même IDENTIFIANT généré lorsque l'application n'a pas été redémarré.
Je reçois le message d'erreur ci-dessous, et lors de l'exécution avec l'option trace, j'ai pu voir que l'ID a été réutilisés
*Mise en veille prolongée: insert into org_myEntity (entitiyJID, entitityName, id) values (?, ?, ?) org.mise en veille prolongée.util.JDBCExceptionReporter
Erreur SQL: 20000, SQLState: 23505
org.mise en veille prolongée.util.JDBCExceptionReporter L'
la déclaration a été annulée parce qu'elle aurait causé un double de la clé
valeur dans une contrainte unique ou primary key ou unique index identifié
par "SQL120725164357680' définie sur 'NOM_TABLE'.
org.mise en veille prolongée.de l'événement.def.AbstractFlushingEventListener
Impossible de synchroniser la base de données d'état de session
org.mise en veille prolongée.exception à la règle.ConstraintViolationException: impossible*
Par ailleurs, je suis en utilisant hibernate 3.3.2.GA, javax.persistance 2.0.0 et Derby 10.5.1 base de données
N'quelqu'un a une idée de ce qui pourrait être mal sur ma génération, et comment pourrais-je résoudre ce problème?
OriginalL'auteur Thomas | 2012-07-25
Vous devez vous connecter pour publier un commentaire.
Si vous utilisez AUTO, Hibernate va choisir l'une des stratégies pour générer votre pièce d'identité. À partir de la Référence:
De sorte que vous avez à voir l'id généré pour voir quelle stratégie Derby. Bien qu'il ressemble, il réinitialise le générateur à chaque fois que vous redémarrez votre application. Essayez de définir
Vous pouvez rapidement corriger à l'aide d'un générateur de séquence. Comme:
Où ENTITY_SEQ est le nom de la séquence dans votre base de données (vous en créer un manuellement).
OriginalL'auteur Tiago Farias