Каждый ответ здесь вроде как правильный, НО!ваш объект должен быть "рекурсивным".
Попробуйте это:
User.java
@Data
@AllArgsConstructor
@NoArgsConstructor
@Entity
@ToString(exclude = "roles")
@Table(name = "user")
public class User {
@Id
@GeneratedValue
@Column(name = "user_id")
private Long id;
@Column
private String username;
@ManyToMany(cascade = { CascadeType.ALL })
@JoinTable(name = "user_role",
joinColumns = { @JoinColumn(name = "user_id") },
inverseJoinColumns = { @JoinColumn(name = "role_id") })
private List<Role> roles = new ArrayList<>();
/*
We need to add methods below to make everything work correctly.
Use them to add or delete roles!!!
*/
public void addRole(Role role) {
roles.add(role);
role.getUsers().add(this);
}
public void removeRole(Role role) {
roles.remove(role);
role.getRoles().remove(this);
}
}
Role.java
@Data
@AllArgsConstructor
@NoArgsConstructor
@Entity
@ToString(exclude = "users")
@Table(name = "role")
public class Role{
@Id
@GeneratedValue
@Column(name = "role_id")
private Long id;
@Column
private String roleName;
@ManyToMany(mappedBy="roles")
private List<User> users = new ArrayList<>();
/*
We need to add methods below to make everything work correctly
*/
public void addUser(User user) {
users.add(user);
user.getRoles().add(this);
}
public void removeUser(User user) {
users.remove(user);
user.getRoles().remove(this);
}
}