2010-08-04 11 views
70

Gibt es eine Möglichkeit, mit JPA anzugeben, dass mehrere eindeutige Integritätsbedingungen für verschiedene Spaltengruppen gelten sollen?Mehrere eindeutige Integritätsbedingungen in JPA

@Entity 
@Table(name="person", 
     [email protected](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 Hibernate-spezifische Anmerkung gesehen, aber ich bin versucht, herstellerspezifische Lösungen zu vermeiden, da wir immer noch zwischen Hibernate und Datanucleus entscheiden.

+7

+1 für den Versuch, herstellerspezifische Anmerkungen zu vermeiden – corydoras

Antwort

112

Das @Table Attribut uniqueConstraints akzeptiert tatsächlich ein Array von diesen. Ihr Beispiel ist nur eine Kurzform für ein Array mit einem einzelnen Element. Otherewise es aussehen würde:

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

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

+1

Ich habe derzeit diese Annotation, aber es scheint, als ob Hibernate den Index für die Tabelle nicht generiert, ob die Tabelle bereits existiert (und sie aktualisiert wird) oder wenn ich die Tabelle entferne und lassen Sie Hibernate automatisch generieren. Fehle ich etwas? –

Verwandte Themen