Java 带列表的HibernateTemplate查询

Java 带列表的HibernateTemplate查询,java,sql,spring,hibernate,jpa,Java,Sql,Spring,Hibernate,Jpa,这里是冬眠初学者,这可能是一个基本问题 假设我有两个hibernate对象:Employee和Department处于一对多关系中。一个部门可以有许多员工 我有一个部门对象的列表,希望检索这些部门中的所有员工。例如,在SQL中很容易: Select * from Employee where Employee.deptID in (1, 2, 6, 19); 在HibernateTemplatefind中执行此操作的正确方法是什么?我看到的示例似乎过于冗长,涉及到创建部门ID的列表,然后覆盖e

这里是冬眠初学者,这可能是一个基本问题

假设我有两个hibernate对象:
Employee
Department
处于一对多关系中。一个部门可以有许多
员工

我有一个
部门对象的
列表
,希望检索这些部门中的所有
员工
。例如,在SQL中很容易:

Select * from Employee where Employee.deptID in (1, 2, 6, 19);
HibernateTemplate
find中执行此操作的正确方法是什么?我看到的示例似乎过于冗长,涉及到创建
部门ID的列表,然后覆盖
executeFind()
。我是否可以直接使用
列表
而不是创建对象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();
    }
});
//详细示例
List Employees=getHibernateTemplate().executeFind(新的HibernateCallback()){
@凌驾
公共列表doInHibernate(会话会话)抛出HibernateeException、SQLException{
Query=session.createQuery(
“选择员工”+
“来自员工e”+
“其中e.deptID在(:id)”
);
setParameterList(“ids”,ids);
返回query.list();
}
});

我假设您有两个实体—员工和部门,在部门中,您有一个员工列表,并希望根据部门ID获取该列表

SELECT emp FROM department d join d.employees emp where d.deptID in(:ids);
这是最好的方法。它会给你一份员工名单


我没有给您提供spring查询方式,但这可能会帮助您

假设您在Employee中有一个部门属性,您可以运行此查询:

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();
    }
});
列出部门=。。。
List Employees=getHibernateTemplate().executeFind(新的HibernateCallback()){
@凌驾
公共列表doInHibernate(会话会话)抛出HibernateeException、SQLException{
Query=session.createQuery(
“选择员工”+
“来自员工e”+
“其中e.部门位于(:部门)”
);
query.setParameterList(“部门”,部门);
返回query.list();
}
});

干杯,这正是我需要的。