Cześć,
mam 3 tabele:
i dwie klasy domenowe User
i Role
:
@Entity
@Table(name = "users")
public class User implements Serializable {
private static final long serialVersionUID = 893284018826505486L;
@Id
@Column(name = "iduser")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int idUser;
@Column(name = "email")
private String email;
@Column(name = "username")
private String username;
@Column(name = "password")
private String password;
@Column(name = "active")
private boolean active;
@Column(name = "idprofilepicture")
private int idProfilePicture;
@ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinTable(name = "rolesofusers",
joinColumns = @JoinColumn(name = "iduser", referencedColumnName = "iduser"),
inverseJoinColumns = @JoinColumn(name = "idrole", referencedColumnName = "idrole"))
private List<Role> roles;
...
@Entity
@Table(name = "roles")
public class Role {
@Id
@Column(name = "idrole", unique = true)
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int idRole;
@Column(name = "name")
private String name;
@ManyToMany(fetch = FetchType.LAZY, mappedBy = "roles", cascade = CascadeType.ALL)
private List<User> users;
...
Repozytoria są tworzone przez JpaRepository
.
Przed dodaniem nowego użytkownika w UserService
dodaję rolę do listy:
@Override
public void save(User user) {
List<Role> roles = new ArrayList<>();
Role role = new Role("USER");
roles.add(role);
user.setRoles(roles);
...
userRepository.save(user);
}
Ale jest problem, bo role się duplikują
Można coś zrobić żeby JpaRepository
dodawało dane tylko do dwóch tabel? Czy trzeba tworzyć własną implementację?