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

标签 mysql sql hibernate

我想使用复杂的需求组合来查询数据库。我知道如何使用 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/

相关文章:

sql - 十进制数的 Oracle ceil

sql - 多对一关系,只选择祖先满足所有条件的行

MySQL 表不是 UTF-8,即使我指示 Hibernate 使用 UTF-8 创建它们

java - 如何在 JdbcTemplate 中创建 mySQL 存储过程

mysql - BelongsToMany 与 Sequelize 表不关联

MySQL(Workbench)按大数据集(30GB)上的操作进行分组

sql - Access : how to detect with VBA whether a query is opened?

java - 如何使用 String 中的 session 保存方法存储 hibernate 的插入查询

mysql - MySQL View 中 LONGTEXT 字段的 JPA native 查询导致错误

php - 在查询中调用 tinyint 为 0(用作 bool 值)的位置