2010-08-04 11 views
70

C'è un modo per specificare usando JPA che ci dovrebbero essere più vincoli univoci su diversi gruppi di colonne?Vincoli univoci multipli 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; 
} 

ho visto una specifica annotazione hibernate ma sto cercando di evitare soluzioni specifiche vendor come stiamo ancora decidendo tra Hibernate e DataNucleus.

+7

+1 per cercare di evitare annotazioni specifiche del fornitore – corydoras

risposta

112

attributo s' Il @TableuniqueConstraints effettivamente accetta un array di questi. Il tuo esempio è solo una scorciatoia per un array con un singolo elemento. Otherewise sarebbe simile:

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

Ogni volta che il vincolo univoco si basa solo su un campo, è possibile utilizzare @Column(unique=true) su quella colonna.

+1

Attualmente ho questa annotazione, ma sembra che Hibernate non stia generando l'indice per la tabella se la tabella esiste già (ed è impostata per l'aggiornamento) o se rimuovo la tabella e lascia che Hibernate lo generi automaticamente. Mi sto perdendo qualcosa? –