2016-08-31 88 views
0

外键我有两个实体:休眠插入从形式

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表单中插入表单。我想从那些表单中添加值。 我的'删除'方法有问题。

在UserDAOImpl:

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

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

当我用这个方法,它删除的UserRole表处 '部门' 和 'USER_ROLE'。但我想只删除用户。

UPDATE

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

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

+0

你不需要编写任何查询来保存对象。使用entityManager.persists()方法 – Jens

+0

但是我怎样才能添加外键“部门”? – Farik013

+0

如果您将部门设置为用户和用户到部门,它将通过休眠来完成 – Jens

回答

0

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

您可以为您的应用程序创建SessionFactory对象,并使用Criteria API将表单值保存到数据库。 请找一个样本链接

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/ 

感谢 普拉迪普