我想使用复杂的需求组合来查询数据库。我知道如何使用 SQL 执行此操作,但我无法在 Hibernate 中映射此查询的结果。根据经验,我知道通常有一种“正确的 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
来做到这一点,但结果非常不雅,我认为应该有更好的方法。
最佳答案
使用 native SQL 查询,您可以编写和 SQL 连接。 所以,我的想法是: 在实体中映射连接集合 (OneToMany)。 使用 query.addJoin() 映射结果,参见 here Chapter 16.1.3
关于mysql - 将子查询中带有 LIMIT 的 SQL 查询转换为 Hibernate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41996702/