@PostConstruct не коммитит роли, админа и юзера
Всем привет. У меня Spring MVC Secuirty Hibernate проект, где реализованы доступ по ролям (админ, юзер), вывод таблицы и crud. У меня все работает, только если я изначально вручную добавлю роль админа, админа и маппинг в mysql. Хотел чтобы с помощью @PostConstruct сделать, чтобы при запуске роли, админ и юзер сами создавались и были добавлены в БД. У меня связь между таблицами User и Role ManyToMany. Я видимо не правильно создаю роли или юзеров. Помогите пожалуйста разобраться с этим
@PostConstruct
private void postConstruct() {
Role role1 = new Role(1,"ROLE_ADMIN");
Role role2 = new Role(2,"ROLE_USER");
roleDAO.addRole(role1);
roleDAO.addRole(role2);
Set<Role> roles_admin = new HashSet<>();
roles_admin.add(roleDAO.getRoleById(1));
User admin = new User(1,"ADMIN",1,1,
"$2a$10$9oMWhHQfzAkAILlfFtgNm.xiSdg2WOMDnVcQuoRoAdonbSFHcf3Tm", roles_admin);
userDAO.addUser(admin);
Set<Role> roles_user = new HashSet<>();
roles_user.add(roleDAO.getRoleById(2));
User user = new User(2,"USER",1,1,
"$2a$10$9oMWhHQfzAkAILlfFtgNm.xiSdg2WOMDnVcQuoRoAdonbSFHcf3Tm", roles_user);
userDAO.addUser(user);
}
Юзер
@Entity
@Table(name = "user")
public class User implements UserDetails {
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@Column(name = "name")
private String name;
@Column(name = "age")
private int age;
@Column(name = "weight")
private int weight;
@Column(name = "password")
private String password;
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(name = "user_role",
joinColumns = @JoinColumn(name = "user_id"),
inverseJoinColumns = @JoinColumn(name = "role_id"))
private Set<Role> roles;
public User(){}
public User(int id, String name, int age, int weight, String password, Set<Role> roles) {
this.id=id;
this.name = name;
this.age = age;
this.weight = weight;
this.password = password;
this.roles = roles;
}
Роль
@Entity
@Table(name = "role")
public class Role implements GrantedAuthority {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String name;
@ManyToMany(mappedBy = "roles")
private Set<User> users;
public Role() {
}
public Role(int id) {
this.id = id;
}
public Role(int id, String name) {
this.id = id;
this.name = name;
}
ДАО Роли
@Repository
public class RoleDAOImp implements RoleDAO{
@PersistenceContext(unitName = "entityManagerFactory")
private EntityManager em;
@Override
public Role getRoleById(int id){
TypedQuery<Role> q = em.createQuery(
"SELECT u FROM Role u WHERE u.id = :id",
Role.class
);
q.setParameter("id", id);
return q.getResultList().stream().findAny().orElse(null);
}
@Override
public void addRole(Role role){
em.persist(role);
}