У меня есть два лица:Hibernate Вставка внешнего ключа из форм
1)
@Entity
@Table(name = "users")
public class User {
private String username;
private String password;
private String name;
private String surname;
@ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinColumn(name = "depId")
private Department department;
private boolean enabled;
private Set<UserRole> userRole = new HashSet<UserRole>(0);
private Set<Equipment> equipment = new HashSet<Equipment>();
2)
@Entity
@Table(name = "department")
public class Department {
private int depId;
private String name;
private String adress;
@OneToMany(fetch = FetchType.EAGER, mappedBy = "department")
private Set<User> user = new HashSet<User>();
Как я могу написать HQL запрос, чтобы вставить значения для пользователя. Не из другого стола. У меня есть JSP-форма, где вставляются формы. Я хочу добавить значения из этих форм. И у меня проблема с методом «delete».
UserDAOImpl:
@Override
public User findByUserName(String username) {
return (User) getSession().get(User.class, username);
}
@Override
public void delete(String username) {
getSession().delete(findByUserName(username));
}
Когда я использую этот метод, удаление 'отдел' в Департаменте и 'USER_ROLE' в UserRole таблице. Но я хочу удалить только пользователя.
UPDATE
Эта проблема исправлена. Но у меня вторая проблема. У меня есть вторая Entity, вроде Depatment с именем UserRole. И есть те же методы. Мне нужен метод:
UserRoleDAOImpl:
@Override
public Set<UserRole> findByRole (Set<UserRole> userRole){
}
DepartmentDAOImpl:
@Override
public Department findByDepartmentName(String departmentName) {
List<Department> departments = getSession()
.createQuery("select d from Department d where d.name =:departmentName")
.setParameter("departmentName", departmentName).list();
return departments.size() == 0 ? null : departments.get(0);
}
Контроллер:
@RequestMapping(value = "/updateUser", method = RequestMethod.POST)
private ModelAndView updateUser(@ModelAttribute("users") User user, BindingResult result) {
ModelAndView model = new ModelAndView();
department = departmentService.findByDepartmentName(user.getDepartment().getName());
user.setDepartment(department);
userRole = userRoleService.findByRole(user.getUserRole());
user.setUserRole(userRole);
userService.update(user);
model.addObject("allUsers", userService.getAllUsers());
model.setViewName("superAdmin");
return model;
}
Я не знаю, как писать userRoleService.findByRole(user.getUserRole())
. Он не работает должным образом.
You не нужно писать какой-либо запрос для сохранения объекта. используйте метод entityManager.persists() – Jens
Но как я могу добавить «отдел» внешнего ключа? – Farik013
Это будет сделано в спящем режиме, если вы установите отдел для пользователя и пользователя в отдел – Jens