2017-10-03 2 views
3

Donc j'essaie d'ajouter une contrainte unique qui utilise deux colonnes. J'ai ajouté la contrainte unique dans db et je suit le code JavaHibernate deux colonne unique index ne peut pas mettre à jour les valeurs

@Entity 
@Table(
    name = "test_table", 
    uniqueConstraints = @UniqueConstraint(
     columnNames = { 
      "other_table_id", 
      "sort_order" 
     }, 
     name = "my_unique_constraint") 
) 
class SomeTable { 

    private String label; 

    @ManyToOne(optional = false) 
    @JoinColumn(name = "other_table_id", nullable = false) 
    private OtherTable otherTable; 

    @NotNull 
    @Column(name = "sort_order", nullable = false) 
    private int sortOrder; 
} 

Lorsque je modifie le tri pour cette table et mettre à jour le disque que je reçois

Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: 
Duplicate entry '1-2' for key 'my_unique_constraint' 

Comment puis-je mettre @UniqueConstraint tel que je don pas ce genre d'erreur.

+0

Pouvez-vous fournir votre code de modification? –

+0

Voulez-vous dire le code complet? –

+0

Je me demande comment la mise à jour est faite. Faites-vous vraiment la mise à jour ou essayez d'insérer le deuxième enregistrement. –

Répondre

1

Vous obtenez cette erreur car vos contraintes uniques ne sont pas séparées.

Donc, mon approche est de séparer les deux contraintes:

@Table(
    name = "test_table", 
    uniqueConstraints = { 
      @UniqueConstraint(columnNames = "other_table_id"), 
      @UniqueConstraint(columnNames = "sort_order") 
    }, 
     name = "my_unique_constraint") 
) 
+0

Je crois que cela va créer deux contraintes uniques et nous ne pouvons pas avoir deux fois le même sort_order dans une table. Je veux faire une contrainte unique telle que other_table_id n'a pas de duplication sort_order. –