Spring Boot добавляет роль в БД, только если она уникальна - PullRequest
0 голосов
/ 05 марта 2020

Я создаю приложение весенней загрузки, которое имеет отношения один ко многим между пользователями и ролями.

Пользователи:

@Entity //Marks class as an entity for JPA
@Table(name="users") //Gives the table a name
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class User {

    @Id //Marks variable as id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;

    private String name;
    private String phoneNumber;
    private String address;
    private String email;
    private String password;

    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    @JoinTable(name="user_role", joinColumns = @JoinColumn(name = "user_id"),inverseJoinColumns = @JoinColumn(name = "role_id"))
    private Collection<Role> roles;

Роли:

@Entity
@Getter
@Setter
@NoArgsConstructor
@Table(name="roles") //Gives the table a nam
public class Role {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    int id;

    String role;

Я пытаюсь сделать так, чтобы при сохранении пользователя в БД с помощью функции сохранения репозитория с использованием CrudRepository ...

void addUser(User user) {
        userRepository.save(user); //adds new user to db.
    }

... Пользователь добавлялся в базу данных и получал Тип роли также прикрепляется к объекту при отправке через следующий Json объект:

{
        "name": "John Hancock",
        "phoneNumber": "555-5555-555",
        "address": "address...",
        "email": "John@gmail.com",
        "password": "adhajisdhakjsd",
        "roles":[{
            "role": "Admin"
        }]
    }

Следующий код работает, добавляя USER в базу данных с присоединенной ROLE, однако добавляя дополнительных пользователей с ту же роль, добавляет новую идентичную строку ROLE внутри базы данных.

Вопрос: Есть ли способ сделать так, чтобы вновь добавленный пользователь просто использовал уже существующий с ROLE, не добавляя новую строку?

1 Ответ

0 голосов
/ 05 марта 2020

Вы можете сделать «роль» первичным ключом. Но лучше не делать этого на этом уровне.

Вы можете отобразить роль на этапе сопоставления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...