Основной стол имеет аннотацию ManyToMany:
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(
name = "user_role",
joinColumns = {@JoinColumn(name = "user_id", referencedColumnName = "id")},
inverseJoinColumns = {@JoinColumn(name = "role_id", referencedColumnName = "id")})
private List<Role> roles;
И второй:
@ManyToMany(mappedBy = "roles", fetch = FetchType.LAZY)
private List<User> users;
Теперь он идеален и работает отлично.Но когда я хотел бы сохранить данные:
@Override
public void saveUser(User user) {
Session currentSession = entityManager.unwrap(Session.class);
Role role = getRoleByName(RoleName.ROLE_ADMIN);
user.setRoles(Collections.singletonList(role));
role.setUsers(Collections.singletonList(user));
currentSession.saveOrUpdate(user);
}
public Role getRoleByName(RoleName name) {
Session currentSession = entityManager.unwrap(Session.class);
Query query = currentSession.createQuery("FROM Role where name =:name");
query.setParameter("name", name);
return (Role) query.uniqueResult();
}
Данные не были сохранены в базе данных.Возможно, мне следует добавить информацию об отношении в методе saveUser.