Я создаю приложение весенней загрузки, которое имеет отношения один ко многим между пользователями и ролями.
Пользователи:
@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, не добавляя новую строку?