2010-05-31 6 views
5

Ich habe die folgende Entity-Bean erstellt und zwei Spalten als eindeutig definiert. Jetzt ist mein Problem, dass die Tabelle ohne die eindeutige Beschränkung und keine Fehler im Protokoll erstellt wird. Hat jemand eine Idee?Eindeutige Einschränkung wurde nicht in JPA erstellt

@Entity 
@Table(name = "cm_blockList", uniqueConstraints = @UniqueConstraint(columnNames = {"terminal", "blockType"})) 
public class BlockList { 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private int id; 
    @ManyToOne(cascade = CascadeType.PERSIST) 
    @JoinColumn(name="terminal") 
    private Terminal terminal; 
    @Enumerated(EnumType.STRING) 
    private BlockType blockType; 
    private String regEx; 
} 
+0

Unser Server ist JBoss, damit der JPA-Provider überwintern, glaube ich. – homaxto

Antwort

5

Nun, ich fand einen anderen Weg, um das Design zu machen. Mehr, weil sich das Design weiterentwickelt hat.
Ich hörte jedoch von einem Kollegen, der das gleiche Problem hatte, dass die einzige Einschränkung nur durch Hibernate (wir führen JBoss 4.3) erstellt wird, wenn die gesamte Datenbank erstellt wird. Es wird nicht funktionieren, wenn Sie eine neue Tabelle in einer vorhandenen Datenbank erstellen.
Also in persistence.xml ist es notwendig hibernate.hbm2ddl.auto zu create-drop zu setzen, damit es funktioniert. Ich kann das aber nicht bestätigen.

+0

homaxto Ihre Beobachtung ist richtig. Ich sah die gleiche Situation und die Einschränkung funktioniert, wenn create-drop gesetzt ist. –

+0

Ich hatte dasselbe Problem, und die gesamte Datenbank neu zu erstellen, funktionierte – greuze

0

Weitere Vorschläge als eine wirkliche Antwort ...

  • sollten Sie klären, welche JPA-Provider (und die Version) Sie für solche Fragen verwenden.

  • Ich stelle fest, dass eine Ihrer Spalten Teil einer ManyToOne Assoziation ist, dies könnte ein "spezieller" Fall sein, der nicht gut von Ihrem JPA-Provider gehandhabt wird. Durch nicht gut behandelt, meine ich Bug. Ich würde den Issue Tracker auf ein bestehendes Problem überprüfen (und vielleicht ein neues erstellen, Ihr Fall scheint JPA-konform zu sein).

2

Sie müssen nicht alles fallen lassen, werfen Sie einfach diese besondere Tabelle Sie einen eindeutigen Index für

0

Ich sah auch das gleiche Problem, aber Hinzufügen unique-key="UK1_test" in der Mapping-Datei hat gut funktioniert.

<property name="hibernate.hbm2ddl.auto">create</property> mit unique-key="UK1_test" unique="true" in der Zuordnungsdatei erstellt alter table employee add constraint UK1_test unique (addrId)

Verwandte Themen