2015-05-26 18 views
13

Supponiamo che io sto avendo 'soggetto' tavoloJPA - @Column (unique = true) - Qual è il vero punto di avere un attributo 'unique'?

CREATE TABLE subject (id int PRIMARY KEY, name VARCHAR(255) **UNIQUE**) 

e oggetto mappato associato,

@Entity 
@Table(name="subject") 
public class SubjectDO { 
    @Id 
    @Column(name="id") 
    int id; 

    @Column(name="name", unique=true) 
    String name; 
    ... 
    // Getter-Setter methods 
} 

Quando cerco di salvare oggetto con duplicare 'nome' con e senza 'unica = true' definito, Sto ottenendo un comportamento simile (stessa eccezione). Ed è ovvio che l'implementazione JPA non può realmente fare nulla se non si raggiunge il DB per il controllo.

Qual è il vero caso d'uso per questo?

(Io parto dal presupposto qui, vincolo univoco è definito a livello di database troppo.)

risposta

29

unique in @Column viene utilizzato solo se si lascia che il vostro fornitore di JPA creare il database per voi - si creerà il vincolo unico sul colonna specificata. Ma se hai già il database, o lo modifichi una volta creato, allora unique non ha alcun effetto.

+0

Grazie! Stavo cercando di trovare la sua rilevanza durante il runtime. Abbiamo qualche risorsa online che riassume le annotazioni specifiche DDL? Ho provato a cercarlo ma non l'ho trovato .. –

+0

Controlla la sezione 11.2 in [Specifica JPA] (http://download.oracle.com/otndocs/jcp/persistence-2_1-edr2-spec/index.html), elenca tutte le annotazioni e i loro attributi che sono osservati nel processo di generazione dello schema. –

+0

Questo è utile .. Grazie! –

9

unique=true in column annotazione saranno utilizzati solo in DDL generation, non ha alcun impatto durante runtime, l'attuale controlli unicità accade nel database

Problemi correlati