带列表的HibernateTemplate查询

时间:2014-12-16 12:09:11

标签: java sql spring hibernate jpa

Hibernate初学者在这里,这可能是一个基本问题。

假设我有两个hibernate对象:EmployeeDepartment,一对多关系。一个部门可以有很多Employees

我有ListDepartment个对象,想要检索这些部门中的所有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();
    }
});

2 个答案:

答案 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);

这是执行此操作的最佳方式。它将为您提供员工列表。

我没有给你春天的查询方式,但这可能对你有帮助