Mehrere eindeutige Einschränkungen in JPA

84

Gibt es eine Möglichkeit, mithilfe von JPA festzulegen, dass für verschiedene Spaltengruppen mehrere eindeutige Einschränkungen gelten sollen?

@Entity
@Table(name="person", 
       uniqueConstraints=@UniqueConstraint(columnNames={"code", "uid"}))
public class Person {
    // Unique on code and uid
    public String code;
    public String uid;

    // Unique on username
    public String username;

    public String name;
    public String email;
}

Ich habe eine Annotation im Ruhezustand gesehen, aber ich versuche, herstellerspezifische Lösungen zu vermeiden, da wir uns immer noch zwischen Ruhezustand und Datenkern entscheiden.

Jacob
quelle

Antworten:

130

Das @TableAttribut 's uniqueConstraintsakzeptiert tatsächlich ein Array davon. Ihr Beispiel ist nur eine Abkürzung für ein Array mit einem einzelnen Element. Andernfalls würde es so aussehen:

@Table(name="person",  uniqueConstraints={
   @UniqueConstraint(columnNames={"code", "uid"}),
   @UniqueConstraint(columnNames={"anotherField", "uid"})
})

Immer wenn die eindeutige Einschränkung nur auf einem Feld basiert, können Sie sie @Column(unique=true)für diese Spalte verwenden.

Bozho
quelle
2
Ich habe derzeit diese Anmerkung, aber es scheint, dass Hibernate den Index für die Tabelle nicht generiert, unabhängig davon, ob die Tabelle bereits vorhanden ist (und aktualisiert werden soll) oder ob ich die Tabelle entferne und Hibernate sie automatisch generieren lasse. Vermisse ich etwas
Kevin M