2010-11-05 14 views
6

Ich habe eine MySQL-Tabelle, die Tags enthält (also wie die hier auf Stack Overflow verwendeten). Es hat einfach eine ID (PK) und eine Tag-Spalte, um das Tag selbst zu halten.Hibernate - Eindeutige Spaltenbeschränkung wird ignoriert

Die kommentierten get-Methoden für meine Tag-Entität sind unten aufgeführt.

@Id 
@GeneratedValue(strategy = GenerationType.IDENTITY) 
@Column(name = "id", unique = true, nullable = false) 
public int getId() { 
    return this.id; 
} 

@Column(name = "tag", unique = true, nullable = false) 
public String getTag() { 
    return this.tag; 
} 

ich eine eindeutige Spalte Einschränkung für Tag verwenden, da es nie mehr als eine Zeile für einen bestimmten Tag sein sollte. Hibernate scheint dies jedoch zu ignorieren, d. H. Ich kann das gleiche Tag mehrmals speichern und erstellt einfach eine neue Zeile, anstatt eine Ausnahme auszulösen.

Fehle ich etwas oder sollte das funktionieren?

Antwort

3

Von JavaDoc von UniqueConstraint (unique=true auf @Colunm ist nur eine Abkürzung):

Diese Anmerkung, dass eine eindeutige Einschränkung angeben, verwendet wird, ist in dem erzeugten DDL für eine primäre oder sekundäre Tabelle aufgenommen werden.

So scheint es keine Eindeutigkeit bei Inserts zu erzwingen. Sie sollten in jedem Fall eine eindeutige Einschränkung in der Datenbank erstellen.

0

Sie vermissen, dass dies nur eine Information ist.

Sie sollten auch eine Einschränkung für die Spalte in der Datenbank hinzufügen.

+0

Vielen Dank für die Antwort. Übrigens, ist das nicht lächerlich ?! – zakmck

+0

Nein, ist es nicht. Die Datenbank validiert diese Entität wirklich sehr schnell. Ein ORM kann nicht so schnell sein. Deshalb hat das Sinn. –

+1

Ich meine, ist nicht lächerlich, dass ich diese Annotation verwende und es nicht eine entsprechende eindeutige Einschränkung in der DB erstellt? So habe ich es anfangs verstanden, obwohl ich ein paar Experimente gemacht habe und es scheint, dass es nicht 'eindeutig = wahr' zum Schema widerspiegelt, nur wenn ich bestimmte Datenbanken benutze, wie HSQL, erzeugt der gleiche Code eine MySQL-Einschränkung wenn Ich wechsle DB-Konfiguration. – zakmck