Использование уникального ограничения на Hibernate JPA2 - PullRequest
23 голосов
/ 28 декабря 2010

Как я могу реализовать свои уникальные ограничения в спящем режиме POJO?при условии, что база данных не содержит.

Я видел уникальный атрибут в аннотации @Column(), но не смог заставить его работать?
Что если я хочу применить это ограничение к нескольким столбцам?

Ответы [ 3 ]

43 голосов
/ 28 декабря 2010

Вы можете объявить уникальные ограничения, используя аннотацию @Table(uniqueConstraints = ...) в вашем классе

@Entity
@Table(uniqueConstraints=
           @UniqueConstraint(columnNames = {"surname", "name"})) 
public class SomeEntity {
    ...
}
33 голосов
/ 28 декабря 2010

По сути, вы не можете реализовать уникальное ограничение без поддержки базы данных.

@UniqueConstraint и unique атрибут @Column являются инструкциями для инструмента генерации схемы для генерации соответствующих ограничений, они не реализуют сами ограничения.

Вы можете выполнить некоторую ручную проверку перед вставкой новых сущностей, но в этом случае вы должны знать о возможных проблемах с параллельными транзакциями.

Поэтому применение ограничений в базе данных является предпочтительным выбором.

19 голосов
/ 15 апреля 2011

В JPA2 вы можете добавить ограничение Unique непосредственно к полю:

@Entity
@Table(name="PERSON_TABLE") 
public class Person{
  @Id
  @Column(name = "UUID")
  private String id;

  @Column(name = "SOCIALSECURITY", unique=true)
  private String socialSecurityNumber;

  @Column(name = "LOGINID", unique=true)
  private String loginId;
}

ИМХО, гораздо лучше назначить уникальное ограничение непосредственно атрибутам, чем в начале таблицы.

Однако, если вам необходимо объявить составной уникальный ключ, то единственной возможностью является его объявление в аннотации @table.

...