Vincoli univoci multipli in JPA


84

C'è un modo per specificare utilizzando JPA che dovrebbero esserci più vincoli univoci su diversi set di colonne?

@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;
}

Ho visto un'annotazione specifica di ibernazione, ma sto cercando di evitare soluzioni specifiche del fornitore poiché stiamo ancora decidendo tra ibernazione e datanucleus.

Risposte:


130

L' @Tableattributo di in uniqueConstraintsrealtà accetta un array di questi. Il tuo esempio è solo una scorciatoia per un array con un singolo elemento. Altrimenti sarebbe simile a:

@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 utilizzarlo @Column(unique=true)su quella colonna.


2
Al momento 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 lascio che Hibernate la generi automaticamente. Mi sto perdendo qualcosa?
Kevin M
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.