Возникла проблема с добавлением роли к аккаунту.
Есть три таблицы : auth_accaunt
auth_accaunt_role
auth_role
Связь между ними Many to many
. При добавлении роли в коллекцию, связь между аккантом и ролью в промежуточную таблицу не добавляется. Сам аккаунт создается, но не устанавливается связь с ролями для него. Подскажите пожалуйста, что необходимо выполнить.
Часть кода из контроллера:
@RequestMapping(value = "/registration", method = RequestMethod.POST)
public String registerUserAccount(
@ModelAttribute("accaunt") Accaunt accaunt,
@ModelAttribute("role") String roleStr
){
Role role = roleDAO.getId(Integer.valueOf(roleStr));
Set<Role> roles = new LinkedHashSet<>();
roles.add(role);
accaunt.getRoles().add(role);
accauntDAO.save(accaunt);
return "redirect:/login";
}
Сущность accaunt:
@Entity
@Table(name = "auth_accaunt")
public class Accaunt implements Serializable {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Integer id;
@Column(name = "login")
private String login;
@Column(name = "password")
private String password;
@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(
name = "auth_accaunt_role",
joinColumns = {
@JoinColumn(name = "id_accaunt")
},
inverseJoinColumns = {
@JoinColumn(name = "id_role")
}
)
private Set<Role> roles = new LinkedHashSet<>();
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name="id_user")
private User user;
public Accaunt() {}
public Integer getId() {
return id;
}
public String getLogin() {
return login;
}
public String getPassword() {
return password;
}
public Set<Role> getRoles() {
return roles;
}
public User getUser() {
return user;
}
public void setId(Integer id) {
this.id = id;
}
public void setLogin(String login) {
this.login = login;
}
public void setPassword(String password) {
this.password = password;
}
public void setRoles(Set<Role> roles) {
this.roles = roles;
}
public void setUser(User user) {
this.user = user;
}
}
Сущность ROLE
@Entity
@Table(name = "auth_role")
public class Role implements Serializable{
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Integer id;
@Column(name = "name")
private String name;
public Role() {}
public Integer getId() {
return id;
}
public String getName() {
return name;
}
public void setId(Integer id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return name;
}
}
Ошибка из-за моей невнимательности... Оказалось дело вообще не в маппинге...
Было:
@Override
public Role getId(Integer id) {
Role role = null;
try (Session session = sessionFactory.openSession()) {
session.beginTransaction();
session.get(Role.class, id);
session.getTransaction().commit();
}
return role;
}
Стало:
@Override
public Role getId(Integer id) {
Role role;
try (Session session = sessionFactory.openSession()) {
session.beginTransaction();
role = session.get(Role.class, id);
session.getTransaction().commit();
}
return role;
}
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Виртуальный выделенный сервер (VDS) становится отличным выбором
День! Есть планшет на android с установленным на нём приложением обратной связиСуть такая - лежит такой планшет на кассе в магазине и каждый желающий...
Ребята я создал конвертор с кириллицы на латиницуНиже предоставил код, он не выдает ошибку правильно компилирует
В проекте на Spring Integration есть канал, в который поступают JPA сущности и записываются в БД при помощи jpa outbound channel adapterНо jpa outbound channel adapter пишет сущности...