Почему @Column(уникальный = true) не работает?

#java #hibernate #entity

#java #спящий режим #сущность

Вопрос:

У меня есть следующий код:

 @Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Entity
@Table
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @Column(name = "FIRST_NAME")
    private String firstName;

    @Column(name = "LAST_NAME")
    private String lastName;

    @NotNull
    @Column(name = "LOGIN", unique = true)
    private String login;

    @Column(name = "PASSWORD")
    private String password;

    @Column(name = "ROLE")
    private UserRole role;

    @Column(name = "E_MAIL", unique = true)
    private String email;

    @Convert(converter = UserStrategyConverter.class)
    @Column(name = "STRATEGY")
    private UserStrategy userStrategy;

    @Column(name = "SUBSCRIPTION")
    private Boolean subscription;

    @Column(name = "MONEY")
    private BigDecimal money;
  

Моя проблема: когда я помещаю этот объект из postman в json:

 {
    "firstName": "Daniel",
    "lastName": "xxx",

    "password": "daniel",
    "role": "ROLE_USER",
    "email": "test@test.pl",
    "subscription": false,
    "money": "1200"
}
  

Это создает объект в сущности. Проблема в том, что я могу умножать этот объект снова и снова вместо unique = true в столбцах ( email и login ). Кто-нибудь может объяснить мне, почему?

Комментарии:

1. Работает ли следующее? @Table(uniqueConstraints = { @UniqueConstraint(columnNames = "login"), @UniqueConstraint(columnNames = "email") }) , не уверен, что columnNames должны быть имена из java-объекта или из таблицы, вам нужно попробовать это

2. У меня это тоже не работает :/

Ответ №1:

Режим гибернации будет учитывать ограничение unique = true только во время генерации схемы.

Во время генерации схемы будет добавлено следующее ограничение:

 alter table User
add constraint UK_u31e1frmjp9mxf8k8tmp990i unique (email)
  

Если вы не используете генерацию схемы, нет смысла использовать unique = true .