2012-08-14 17 views
23

Sto utilizzando SEAM 2/Hibernate insieme al database PostgreSQL 9. Ho la seguente tabellaVincolo univoco su più colonne

Active Band 
=========== 
active_band_id serial 
active_band_user text 
active_band_date timestamp 
active_band_process integer 

vorrei aggiungere un vincolo che garantisce ogni nuova voce ha una combinazione unica di active_band_user e active_band_date.

ci potrebbero essere potenzialmente molti tentativi di inserti per secondo quindi ho bisogno di questo per essere il più efficiente possibile, c'è una cucitura/hibernate annotazione posso utilizzare nella mappatura entità?

Grazie in anticipo

+0

Questo sembra duplicare http://stackoverflow.com/questions/3211972/specifying-restrictions-unique-together-in -hibernate –

risposta

52

Non v'è alcuna annotazione Hibernate che controlla l'unicità prima di inserimento/aggiornamento. Ma c'è un'annotazione che genererà un tale vincolo al database se si utilizza la creazione automatica del database:

@Table(
    name="ACTIVE_BAND", 
    uniqueConstraints= 
     @UniqueConstraint(columnNames={"active_band_user", "active_band_date"}) 
) 
+0

Non penso che supporti questo perché ottengo 'Il valore per l'attributo di annotazione Table.uniqueConstraints deve essere qualche @ javax.persistence.UniqueConstraint annotation' in Eclipse. Questo metodo genera il vincolo nello schema SQL? – DaveB

+0

Sì, supporta. È documentato qui: http://docs.oracle.com/javaee/6/api/javax/persistence/Table.html#uniqueConstraints%28%29 Qualcos'altro deve essere sbagliato. Javax.persistence.UniqueConstraint è importato? –

+12

So che era anni fa, ma assicurati di utilizzare 'javax.persistence.Table' non' org.hibernate.annotations.Table'. La '@ Table' di Hibernate non ha un campo' uniqueConstraints'. – Patrick