【问题标题】:Hibernate Insert foreign key from forms休眠从表单插入外键
【发布时间】:2016-08-31 06:48:48
【问题描述】:

我有两个实体:

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 表单。我想从那表格中添加值。 我对“删除”方法有疑问。

用户DAOImpl:

@Override
    public User findByUserName(String username) {
        return (User) getSession().get(User.class, username);
    }

@Override
    public void delete(String username) {
        getSession().delete(findByUserName(username));
    }

当我使用此方法时,它会删除 Department 中的“department”和 UserRole 表中的“user_role”。但我只想删除用户。

更新

此问题已解决。但我有第二个问题。我有第二个实体,例如名为 UserRole 的 Depatment。并且有相同的方法。我需要方法:

UserRoleDAOImpl:

@Override
public Set<UserRole> findByRole (Set<UserRole> userRole){

}

部门DAOImpl:

@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())。它不能正常工作。

【问题讨论】:

  • 您不需要编写任何查询来保存对象。使用 entityManager.persists() 方法
  • 但是如何添加外键“部门”?
  • 如果将部门设置为用户,将用户设置为部门,它将由休眠完成
  • 你的意思是设置部门到用户和用户到部门?你的意思是我写的实体吗?
  • 我的意思是你创建对象调用user.setDepartment和`department.setUsers(ListOfusers)的点。

标签: java mysql hibernate


【解决方案1】:

由于您使用的是注释,因此您需要阅读有关插入到 db 的休眠事务。希望您已经在 db 中创建了一个表。

您可以为您的应用程序创建 SessionFactory 对象并使用 Criteria api 将您的表单值保存到 db。 请找到示例链接

http://www.dineshonjava.com/2013/08/spring-crud-example-using-many-to-one.html#.V8aQp_l97IU

如果您仍然只想编写查询,那么您可以将条件与 hql 一起使用

https://www.mkyong.com/hibernate/hibernate-criteria-examples/

谢谢 普雷迪普

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多