2012-08-14 18 views
23

Ich verwende SEAM 2/Hibernate zusammen mit PostgreSQL 9-Datenbank. Ich habe die folgende TabelleEindeutige Einschränkung über mehrere Spalten

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

Ich möchte eine Einschränkung hinzufügen, die jeder neue Eintrag stellt sicher, verfügt über eine einzigartige Kombination von active_band_user und active_band_date.

Es könnte möglicherweise viele versuchte Inserts pro Sekunde geben, also brauche ich das so effizient wie möglich, gibt es eine SEAM/Hibernate Annotation, die ich in der Entity Mapping verwenden kann?

Vielen Dank im Voraus

+0

Dies scheint http://stackoverflow.com/questions/3211972/specifying-restrictions-unique-together-in zu duplizieren -hibernate –

Antwort

52

Es gibt keine Hibernate Annotations, die vor dem insert/update Eindeutigkeit überprüft. Aber es ist Anmerkung, die eine solche Einschränkung Datenbank generieren, wenn die automatische Erstellung der Datenbank verwendet wird:

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

Ich denke nicht, dass es dies unterstützt, wie ich bekomme 'Der Wert für Annotation-Attribut Table.uniqueConstraints muss einige @ javax.persistence.UniqueConstraint Annotation' in Eclipse sein. Generiert diese Methode die Einschränkung im SQL-Schema? – DaveB

+0

Ja, es unterstützt. Es ist hier dokumentiert: http://docs.oracle.com/javaee/6/api/javax/persistence/Table.html#uniqueConstraints%28%29 Etwas anderes muss falsch sein. Wird javax.persistence.UniqueConstraint importiert? –

+12

Ich weiß, das war vor Jahren, aber stellen Sie sicher, dass Sie die 'javax.persistence.Table' nicht' org.hibernate.annotations.Table' verwenden. Hibernate '@ Table' hat kein' uniqueConstraints'-Feld. – Patrick