Hibernate初学者在这里,这可能是一个基本问题。
假设我有两个hibernate对象:Employee
和Department
,一对多关系。一个部门可以有很多Employees
。
我有List
个Department
个对象,想要检索这些部门中的所有Employees
。例如,在SQL中它很容易:
Select * from Employee where Employee.deptID in (1, 2, 6, 19);
在HibernateTemplate
查找中执行此操作的正确方法是什么?我看过的例子似乎无可救药,并涉及创建departmentIDs
列表然后覆盖executeFind()
。我可以使用List<Department>
直接执行此操作,而不是创建对象ID列表吗?
//Verbose example
List Employees = getHibernateTemplate().executeFind(new HibernateCallback<List>() {
@Override
public List doInHibernate(Session session) throws HibernateException, SQLException {
Query query = session.createQuery(
"select employee" +
"from employee e " +
"where e.deptID in (:ids) "
);
query.setParameterList("ids", ids);
return query.list();
}
});
答案 0 :(得分:1)
假设您在Employee中有一个department属性,则可以运行此查询:
List<Departement> departments = ...
List Employees = getHibernateTemplate().executeFind(new HibernateCallback<List>() {
@Override
public List doInHibernate(Session session) throws HibernateException, SQLException {
Query query = session.createQuery(
"select employee" +
"from employee e " +
"where e.department in (:departments) "
);
query.setParameterList("departments", departments);
return query.list();
}
});
答案 1 :(得分:-1)
我假设您有两个实体员工和部门,在部门中,您有一个员工列表,并希望根据部门的ID获取该列表。
SELECT emp FROM department d join d.employees emp where d.deptID in(:ids);
这是执行此操作的最佳方式。它将为您提供员工列表。
我没有给你春天的查询方式,但这可能对你有帮助