gpt4 book ai didi

mysql - 将子查询中带有 LIMIT 的 SQL 查询转换为 Hibernate

转载 作者:行者123 更新时间:2023-11-29 02:46:10 25 4
gpt4 key购买 nike

我想使用复杂的需求组合来查询数据库。我知道如何使用 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 运行这个查询,但我发现很难映射这些结果。问题是我想将结果映射回 EmployeeCompany 实体。我已经设法通过创建自定义 ResultTransformer 来做到这一点,但结果非常不雅,我认为应该有更好的方法。

最佳答案

使用 native SQL 查询,您可以编写和 SQL 连接。所以,我的想法是:在实体中映射连接集合 (OneToMany)。使用 query.addJoin() 映射结果,参见 here Chapter 16.1.3

关于mysql - 将子查询中带有 LIMIT 的 SQL 查询转换为 Hibernate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41996702/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com