23

Arbeiten an einem älteren Hibernate-Code.Wie macht man mehrere Spalten UniqueConstraint in hbm?

Wie mache ich Folgendes mit hbm.xml (Hibernate Mapping-Datei) statt mit Anmerkungen?

@Table(name="users", uniqueConstraints = { 
    @UniqueConstraint(columnNames={"username", "client"}), 
    @UniqueConstraint(columnNames={"email", "client"}) 
}) 
public class User implements Serializable { 
    private static final long serialVersionUID = 1L; 
    @Id 
    private int id; 
    private String username; 
    private String email; 
    private Client client; 
} 

Antwort

20

Verwenden Sie das properties tag:

... 
<properties name="uk1" unique="true"> 
     <property name="username" .../> 
     <many-to-one name="client" .../> 
</properties> 

<properties name="uk2" unique="true"> 
     <property name="email" .../> 
     <many-to-one name="client" update="false" insert="false" .../> 
</properties> 
... 

Dokumentation Extrakt:

Das <Eigenschaften> Element erlaubt die Definition eines benannten, logische Gruppierung der Eigenschaften einer Klasse. Die wichtigste Verwendung des Konstrukts ist, dass es eine Kombination von Eigenschaften das Ziel eines Property-Ref ermöglicht. Es ist auch eine bequeme Möglichkeit, eine mehrspaltige eindeutige Einschränkung zu definieren.

Alle verfügbaren Optionen sind in der Hibernate documentation beschrieben.

+0

Hallo, ich weiß, dass das in der Dokumentation steht, aber das hat bei mir nicht funktioniert. Die Lösung war das Setzen des 'unique' innerhalb des' column' Tags anstelle des 'property' Tags' ' –

+1

Ich weiß nicht, warum das Merkmal-Tag für Sie nicht funktioniert hat (Hibernate-Version?), aber Ihre Definition wird nicht in der Lage sein, eine mehrspaltige eindeutige Einschränkung zu modellieren. – Thierry

+0

es ist Hibernate 3, und die Lösung, die ich gab, funktionierte genau so, wie ich wollte! –

2

Sie können dies auch tun:

<many-to-one name="client" unique-key="uk1,uk2" .../> 
    <property name="username" unique-key="uk1" .../> 
    <property name="email" unique-key="uk2" .../> 

Sie brauchen nicht den Tag in hbm zu verwenden. Wenn Sie nur mehrere eindeutige Einschränkungen wünschen.

+0

Bitte sehen Sie dies zuerst [wie zu beantworten] (https://stackoverflow.com/help/how-to-answer) Diese Frage wird beantwortet, bevor Sie natürlich Ihre hinzufügen können antworte hier. Aber Sie müssen einige Punkte vor der Beantwortung verstehen. Fügen Sie zunächst keine Antwort hinzu, die zuvor mit dem gleichen Code oder Vorschlag hinzugefügt wurde. Zweitens, fügen Sie keine übermäßig komplizierte Antwort hinzu, wenn der Benutzer sehr spezifisch nach dem Problem gefragt hat und was er braucht, um dies zu lösen. Drittens, Sie können einen Kommentar hinzufügen, wenn Sie etwas zu der Antwort oder Frage vorschlagen möchten. –

Verwandte Themen