#java #spring #hibernate #spring-mvc
#java #spring #переход в спящий режим #spring-mvc
Вопрос:
Цель моего проекта — иметь администраторов / менеджеров / сотрудников / клиентов. После входа в систему пользователь в зависимости от роли будет иметь эти функции:
- Обновите информацию о сотрудниках в списке сотрудников (менеджеры, администраторы)
- Просмотр списка клиентов (Менеджеры, Администраторы, Сотрудники)
- Обновите собственную информацию пользователей (менеджер, администратор, сотрудник, клиенты)
Проблема, на которой я застрял в течение нескольких недель, заключается в том, что при обновлении любой информации о пользователях эта роль пользователя автоматически удаляется из базы данных. Это удаляет их доступ из веб-приложения.
Я провел некоторое исследование, пытаясь разобраться в этом, но не нашел надежного ответа. Любая помощь была бы оценена, спасибо!
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=?
Редактировать:
Role.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 ''' '}';
}
}
Комментарии:
1. вероятно, поле
roles
в Employee имеет значение null при обновлении. Попробуйте использовать точку останова в своем коде и просмотрите это поле перед обновлением employee.2. Казалось бы, это так, я добавил системный вывод System.out.println(«Это роли сотрудников» theEmployee.getRoles()); и он вернул «Это роли сотрудников null»
3. Можете ли вы предоставить json, который вы отправляете?
4. Я не использую JSON / Restful для этого проекта atm
5. После добавления в файл jsp: <форма:скрытый путь=»роли»/>. Системный журнал возвращает [Роль{id=null, name=’Роль{id=3′}, Роль{id=null, name=’имя=’ROLE_ADMIN’}’}]
Ответ №1:
Вы можете добавить этот код в свой класс ролей:
@ManyToMany(mappedBy="roles")
private Collection<Employee> employees;
Комментарии:
1. Спасибо за ответ, я обновил сообщение классом Role
2. Спасибо Джозепу за предоставление информации. Сначала я попытаюсь повысить свою репутацию.
3. Я добавил код, но результат не изменился. Проблема, похоже, в том, что сеанс не сохраняет роль пользователя, в результате чего он возвращает null. Поскольку hibernate видит null, он решает удалить отношение в базе данных.