【问题标题】:Translating a SQL query with a LIMIT in a subquery to Hibernate将子查询中带有 LIMIT 的 SQL 查询转换为 Hibernate
【发布时间】: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 运行此查询,但我发现很难映射这些结果。问题是我想将结果映射回EmployeeCompany 实体。我通过创建自定义ResultTransformer 设法做到了这一点,但结果非常不雅,我认为应该有更好的方法。

【问题讨论】:

    标签: mysql sql hibernate


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2014-07-12
      • 2015-10-10
      • 1970-01-01
      • 2021-09-15
      • 1970-01-01
      • 2020-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多