【发布时间】:2017-02-02 07:46:33
【问题描述】:
我想使用一些复杂的需求组合来查询数据库。我知道如何使用 SQL 来执行此操作,但我无法在 Hibernate 中映射此查询的结果。根据经验,我知道通常有一种“适当的休眠方式”来做这样的事情,但我很难找到它。
我要提取的数据由父/子关系组成。我们称父实体Company 和子实体Employee。两者之间的关系在名为EmployeeToCompany 的表中指定。
公司的数量很大,所以我只想获取前 10 个。如果我要执行常规 JOIN 并在主查询上设置一个 LIMIT,我最终会得到前 10 个公司/员工对,但我想获取前 10 家公司的所有公司/员工对。这就是我创建以下 SQL 查询的原因:
select * from Employee
inner join CompanyToEmployee on CompanyToEmployee.employeeId = Employee.id
inner join (
select *
from Company
order by interestingness asc
limit 0, 10
) as selectedCompany on CompanyToEmployee.companyId = selectedCompany.id
order by selectedCompany.interestingness asc, Employee.lastName asc, Employee.firstName asc
我正在使用 Session.createSQLQuery 从 Hibernate 运行此查询,但我发现很难映射这些结果。问题是我想将结果映射回Employee 和Company 实体。我通过创建自定义ResultTransformer 设法做到了这一点,但结果非常不雅,我认为应该有更好的方法。
【问题讨论】: