【发布时间】:2019-03-18 17:42:21
【问题描述】:
我的项目的目的是拥有管理员/经理/员工/客户。登录后,根据角色的用户将具有以下功能:
- 更新员工列表中的员工信息(经理、管理员)
- 查看客户列表(经理、管理员、员工)
- 更新用户自己的信息(经理、管理员、员工、客户)
我已经坚持了几个星期的问题是,当更新任何用户信息时,它会自动从数据库中删除该用户角色。这会从网络应用中移除他们的访问权限。
我已经进行了一些研究,试图弄清楚这一点,但还没有找到可靠的答案。任何帮助将不胜感激,谢谢!
Employee.java
@ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinTable(name = "employee_roles",
joinColumns = @JoinColumn(name = "employee_id"),
inverseJoinColumns = @JoinColumn(name = "role_id"))
private Collection<Role> roles;
EmployeeController.java -
@PostMapping("/saveEmployee")
public String saveEmployee(@ModelAttribute("employee") Employee theEmployee) {
employeeService.saveEmployee(theEmployee);
return "redirect:/employee/list";
}
EmployeeDaoImpl.java -
@Override
public void saveEmployee(Employee theEmployee) {
// get current hibernate session
Session currentSession = sessionFactory.getCurrentSession();
// save Employee
currentSession.update(theEmployee);
}
日志 -
Hibernate: update employee set address=?, email=?, first_name=?, last_name=?, password=?, phone_number=?, username=?, zipcode=? where id=?
Hibernate: delete from employee_roles where employee_id=?
编辑:
角色.java
Entity
@Table(name = "role")
public class Role {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
@Column(name = "name")
private String name;
public Role() {
}
public Role(String name) {
this.name = name;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Role{" + "id=" + id + ", name='" + name + '\'' + '}';
}
}
【问题讨论】:
-
更新时,Employee 中的
roles字段可能为空。尝试在代码中使用断点并在更新员工之前查看该字段。 -
好像是这样,我加了一个sysout System.out.println("这是员工角色" + theEmployee.getRoles());它返回“这是员工角色为空”
-
你能提供你发送的json吗?
-
我没有在这个项目 atm 中使用 JSON/Restful
-
在jsp文件中添加后:
。 sysout 日志返回 [Role{id=null, name='Role{id=3'}, Role{id=null, name='name='ROLE_ADMIN'}'}]
标签: java spring hibernate spring-mvc