Frage

Arbeiten auf einige Legacy-Hibernate-Code.

Wie mache ich folgende mit hbm.xml (Mapping-Datei Hibernate) 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;
}
War es hilfreich?

Lösung

Mit dem 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 Auszug:

Das -Element erlaubt die Definition eines benannten, logische Gruppierung der Eigenschaften einer Klasse. Die wichtigste Anwendung des Konstrukts ist, dass es sich um eine Kombination von Eigenschaften ermöglicht, dass das Ziel eines Eigenschaft-ref. Es ist auch ein bequemer Weg, eine definieren mehrspaltigen eindeutige Einschränkung.

Alle verfügbaren Optionen werden in der Hibernate Dokumentation .

Andere Tipps

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 wollen.

können Sie fügen gleiches einzigartigen-Key-Attribut auf zwei verschiedene Spalten. Dies wird Verbund eindeutige Schlüssel erstellen.

<property name="firstName" column="first_name" unique-key="name" />
<property name="lastName" column="last_name" unique-key="name" />

Im obigen Beispiel der eindeutige Schlüssel wird von beiden first_name und last_name Spalte erstellt werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top