Подтвердить что ты не робот

Использование уникального ограничения для Hibernate JPA2

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

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

@Entity
@Table(uniqueConstraints=
           @UniqueConstraint(columnNames = {"surname", "name"})) 
public class SomeEntity {
    ...
}

Ответ 3

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

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

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