Как сделать несколько столбцов UniqueConstraint в HBM? - PullRequest
24 голосов
/ 30 апреля 2010

Работа над устаревшим кодом гибернации.

Как мне сделать следующее с hbm.xml (файл отображения hibernate) вместо с аннотациями?

@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;
}

Ответы [ 3 ]

21 голосов
/ 30 апреля 2010

Используйте тег properties:

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

Выписка из документации:

Элемент позволяет определять именованные, логическая группировка свойств класса. Самое важное использование конструкции состоит в том, что она позволяет сочетать свойства цель свойства-ref. Это также удобный способ определить многостолбцовое уникальное ограничение.

Все доступные опции описаны в документации Hibernate .

6 голосов
/ 17 июля 2017

Вы также можете сделать это:

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

Вам не нужно использовать тег в hbm. Если вы хотите только несколько уникальных ограничений.

0 голосов
/ 16 мая 2019

Вы можете добавить один и тот же атрибут уникального ключа в два разных столбца. Это создаст составной уникальный ключ.

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

В приведенном выше примере уникальный ключ будет создан из столбцов first_name и last_name.

...