7
votes

Contrainte unique non créée en JPA

J'ai créé le haricot d'entité suivant et spécifié deux colonnes comme unique. Maintenant, mon problème est que le tableau est créé sans la contrainte unique et aucune erreur dans le journal. Est-ce que quelqu'un a une idée? XXX


1 commentaires

Notre serveur est JBoss, le fournisseur JPA est donc hiberné, je crois.


6 Réponses :


0
votes

Plus de suggestions qu'une réponse réelle ...

  • Vous devez clarifier le fournisseur JPA (et la version) que vous utilisez pour de telles questions.

  • Je remarque que l'une de vos colonnes fait partie d'une association HeuresToone , cela peut être un cas "spécial" non bien géré par votre fournisseur JPA. Par non bien manipulé, je veux dire bug. Je vérifierais le problème de la question pour un problème existant (et peut-être créer un nouveau, votre cas semble compatible JPA).


0 commentaires

7
votes

Eh bien, j'ai trouvé une autre façon de faire la conception. Plus parce que la conception a évolué qu'un travail autour de.
J'ai entendu parler d'un collègue qui avait eu le même problème, cette contrainte unique uniquement ne sont créées que par Hibernate (nous exécutons JBoss 4.3) lorsque toute la base de données est créée. Cela ne fonctionnera pas lorsque vous créez une nouvelle table dans une base de données existante.
Donc, dans persistance.xml il est nécessaire de définir hibernate.hbm2ddl.auto sur créer-goutte pour le faire fonctionner. Je ne peux pas le confirmer cependant.


3 commentaires

Homaxà votre observation est correcte. J'ai confronté la même situation et la contrainte fonctionne lorsque la création-goutte est définie.


J'ai eu le même problème et la création de l'ensemble de la base de données a travaillé


Je l'ai testé en recélérant toute la base de données en utilisant toutes les 3 options: update , créer et create-goutte et il n'a pas Travaillez pour moi pour l'une des trois options. Logiquement également, il n'a pas de sens de le faire fonctionner avec juste Create-goutte Mettre à jour et Créer . On dirait un bug pour moi dans Hibernate. Mais encore une fois, je me demande comment vient que ce bogue n'est pas encore résolu par 2021 (bug de 10 ans ??).



2
votes

Vous n'avez pas à tout laisser tomber, déposez simplement cette table particulière que vous souhaitez créer un index unique pour


0 commentaires

0
votes

Si vous voulez la contrainte unique, vous devez le faire par SQL:

ALTER TABLE cm_blockList ADD CONSTRAINT cm_blockList_unq UNIQUE (terminal);


0 commentaires

0
votes

J'ai également fait face au même problème, mais ajout de key unique = "uk1_test" dans le fichier de mappage fonctionnant bien.

créer avec unique-key = "uk1_test" unique = "vrai" dans le fichier de mappage créé Alter Table Employé Ajouter une contrainte UK1_TEST UNIC (Adrid)


0 commentaires

0
votes

Ces jours-ci, je rencontre le même problème lorsque j'ajouterai @column (nullable = false, unique = true, longueur = 16) et n'a pas obtenu un index unique.

Après quelques essais avec elle, j'ai trouvé une table de base de données de mise à jour de Data Spring Data JPA (DDL) lorsque les champs changent mais pas avec les modifications @column. Attribuez donc unique = true après que les tableaux créés sont inutiles. Pour obtenir une table avec un index unique, vous devez déposer l'ancien one.Tren réexécuter le code, que JPA crée une table à nouveau.

Je crois que c'est parce que JPA ne sait pas si elle contient la même valeur de champ dans la table ancienne lors de l'évitement d'un nouvel index unique. Il accepte une nouvelle table.


0 commentaires