2016-08-31 85 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/ 

感謝 普拉迪普