【问题标题】:Hibernate user update deletes user roleHibernate 用户更新删除用户角色
【发布时间】:2019-03-18 17:42:21
【问题描述】:

我的项目的目的是拥有管理员/经理/员工/客户。登录后,根据角色的用户将具有以下功能:

  1. 更新员工列表中的员工信息(经理、管理员)
  2. 查看客户列表(经理、管理员、员工)
  3. 更新用户自己的信息(经理、管理员、员工、客户)

我已经坚持了几个星期的问题是,当更新任何用户信息时,它会自动从数据库中删除该用户角色。这会从网络应用中移除他们的访问权限。

我已经进行了一些研究,试图弄清楚这一点,但还没有找到可靠的答案。任何帮助将不胜感激,谢谢!

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


【解决方案1】:

您可以将这些代码添加到您的角色类中:

@ManyToMany(mappedBy="roles")
private Collection<Employee> employees;

【讨论】:

  • 感谢回复,我用角色类更新了帖子
  • 感谢 Josep 提供信息。我会先努力提高我的声誉。
  • 我添加了代码但没有改变结果。问题似乎是会话没有保留用户角色,导致它返回 null。由于 hibernate 看到 null 它决定删除数据库中的关系。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-24
  • 1970-01-01
  • 1970-01-01
  • 2018-11-04
  • 2016-02-11
  • 2015-12-17
相关资源
最近更新 更多