Hibernate / Postgres: двойное значение ключа нарушает уникальное ограничение - PullRequest
0 голосов
/ 12 февраля 2020

У меня проблема с добавлением роли пользователя во время регистрации

Это моя диаграмма БД:

enter image description here

И у меня есть следующие классы: первый - это роль объекта:

    package application.model;

    import lombok.*;
    import javax.validation.constraints.NotEmpty;
    import javax.validation.constraints.NotNull;
    import javax.persistence.*;
    import java.util.List;

    @NamedQueries({
            @NamedQuery(name = User.GET_USERS, query = User.QUERY_GET_USERS),
    })
    @Getter
    @Setter
    @NoArgsConstructor
    @Entity
    @Table(name = "users")
    public class User {
        public static final String GET_USERS = "User.get_users";
        public static final String QUERY_GET_USERS = "select u from User u";


        @Id
        @NotNull
        @GeneratedValue(strategy = GenerationType.SEQUENCE)
        @Column(name = "id")
        public int id;

        @NotNull
        @NotEmpty
        @Column(name="firstname")
        private String firstname;

        @NotNull
        @Column(name="lastname")
        private String lastname;

        @NotNull
        @Column(name="email")
        private String email;

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

        @JoinTable
        @OneToMany
        private List<Role> roles;
    }

второй объект - это роль:

    package application.model;

    import lombok.Getter;
    import lombok.NoArgsConstructor;
    import lombok.Setter;
    import javax.persistence.*;
    import javax.validation.constraints.NotNull;

    @Getter
    @Setter
    @NoArgsConstructor
    @Entity
    @Table(name = "role")
    public class Role {
        @Id
        @NotNull
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        @Column(name = "id")
        public int id;

        @NotNull
        @Column(name="name")
        private String name;

    }

Итак, у меня есть 3 роли в моем приложении, когда я регистрирую нового пользователя с пост-запросом:

{
        "firstname": "imasdie5",
        "lastname": "nazasdwisko5",
        "email": "masdil",
        "password": "pass",
        "roles": [
             { "id":2 }
         ]
    }

Первый пользователь зарегистрирован правильно, но когда я отправляю второй запрос с теми же role.id = 2, у меня есть:

ОШИБКА: нарушается значение дубликата ключа уникальное ограничение "uk_d9najy24fium4vkivgwjuf0hw" Подробно: ключ (role_id) = (2) уже существует.

В таблице dbeaver users_role имеют ограничение uk_d9najy24fium4vkivgwjuf0hw с типом UNIQUE_KEY, но не так, как это? Многие пользователи могут иметь одинаковую роль, поэтому мне необходимо enter image description here

Все таблицы создаются в режиме гибернации. Таблица users_role не является сущностью в моем приложении, может быть, это должна быть сущность? Есть ли у вас какой-либо совет, что мне следует изменить, чтобы добавить одну роль для многих пользователей?

1 Ответ

1 голос
/ 12 февраля 2020

Попробуйте использовать @ManyToMany аннотацию

    @JoinTable
    @ManyToMany
    private List<Role> roles;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...