Использование уникального ограничения для Hibernate JPA2
Как я могу реализовать свои уникальные ограничения для спящего режима POJO? предполагая, что база данных не содержит.
Я видел уникальный атрибут в аннотации @Column()
, но я не мог заставить его работать?
Что делать, если я хочу применить это ограничение к нескольким столбцам?
Ответы
Ответ 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
является вашим единственным вариантом.