JPA - @Column (unique = true) - что на самом деле означает наличие уникального атрибута?
Предположим, что у меня есть таблица "subject"
CREATE TABLE subject (id int PRIMARY KEY, name VARCHAR(255) **UNIQUE**)
и связанный Mapped Object,
@Entity
@Table(name="subject")
public class SubjectDO {
@Id
@Column(name="id")
int id;
@Column(name="name", unique=true)
String name;
...
// Getter-Setter methods
}
Когда я пытаюсь сохранить объект с дублирующимся "именем" с определением "unique = true" и без него, я получаю подобное поведение (такое же исключение). И очевидно, что реализация JPA не может ничего сделать, к DB для проверки.
Каков реальный вариант использования?
(Я предполагаю здесь, уникальное ограничение также определено на уровне базы данных.)
Ответы
Ответ 1
unique
в @Column
используется только в том случае, если вы предоставите поставщику JPA базу данных для вас - это создаст уникальное ограничение для указанного столбца. Но если у вас уже есть база данных или вы меняете ее после ее создания, то unique
не имеет никакого эффекта.
Ответ 2
unique=true
в column
аннотация будет использоваться только в DDL generation
, она не имеет никакого влияния во время runtime
, фактические проверки уникальности происходят в database