Ниже - родительская таблица - пользователи:
@Entity
@Table(name = "user")
public class User {
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "username", length = 50, unique = true)
@NotNull
@Size(min = 4, max = 50)
private String username;
@Column(name = "password", length = 100)
@NotNull
@Size(min = 4, max = 100)
private String password;
@ManyToMany(cascade = { CascadeType.ALL }, 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;
//constructor, getters/setters
Ниже вы можете найти таблицу с ролями:
@Entity
@Table(name = "role")
public class Role {
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "name", length = 50)
@NotNull
@Enumerated(EnumType.STRING)
private RoleName name;
@ManyToMany(mappedBy = "roles", fetch = FetchType.LAZY)
private List<User> users;
//constructor, getters/setters
И я постараюсь сохранить пользователя методом ниже:
private static SessionFactory sessionFactory;
private Session session;
@Override
public void saveUser(User user) {
Role role = getRoleByName(RoleName.ROLE_ADMIN);
user.getRoles().add(role );
role.getUsers().add( user );
session.persist(user);
}
public Role getRoleByName(RoleName name) {
Query query = session.createQuery("SELECT r FROM Role r WHERE r.name= :name");
query.setParameter("name", name);
return (Role) query.uniqueResult();
}
Но у меня есть две проблемы:
- первая - главная проблема - я сделал что-то не так и не могу сохранить нового пользователя.
- второй - у меня нулевой результат в результате запроса в getRoleByName, но, конечно, эта роль существует в таблице user_roles.
И любое решение будет для меня идеальным.
Заранее спасибо.