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