java - 如何展平 Hibernate 查询的结果

标签 java hibernate

假设我执行了一个理论上的 HQL 查询,例如 FROM Customer。在 Customer 中,有一个 getOrders() getter,它返回 Order 对象的 ManyToOne 集合。这将执行一条 SQL 语句,从 Customer 中进行选择,并通过左连接连接到 Order。

通过对象模型,我可以以编程方式迭代客户,然后迭代订单。

但是,我想将分层对象模型转换为左连接的平面表格结果,以便结果看起来与此 SQL 查询的结果非常相似:

SELECT *
FROM Customer
LEFT JOIN Order on Customer.customerId = Order.customerId

结果示例:

Customer.customerId  ... Order.orderId  Order.customerId ...
1                        200            1
2                        201            2
2                        202            2
3                        NULL           NULL

有没有一种简单的方法可以使用 Hibernate 来做到这一点?

最佳答案

取决于您在“标量”级别想要什么,您可以通过使用显式选择子句来控制该级别。

select c, o
from Customer c left join c.orders o

返回(客户、订单)元组列表。或者:

select c.id, c.name, o.id, ...
from Customer c left join c.orders o

它会返回原子片段的标量投影。

在这两种情况下,您都会返回一个列表。您可以在这两种情况下使用“动态实例化”(尽管在第二种情况下实际上它更有用):

select new CustomerOrderSummary( c.id, c.name, o.id, ... )
from Customer c left join c.orders o

其中 CustomerOrderSummary 只是一个具有匹配构造函数的普通类。

关于java - 如何展平 Hibernate 查询的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12692624/

相关文章:

java - Hibernate 和 JPA,用什么,用在哪里?

java - Hibernate ManyToOne 使用外键连接到非主键目标列

java - 连接过多错误 : Hibernate

java - 在多线程环境中使用 select for update nowait 时,只读结果集的操作无效

java - 制作一个包含与第一个列表相同的对象的新ArrayList?

java - chrome v62 启用闪光灯

java - 使用 java POJO 和 jackson 进行 Rest api 测试

java - Hibernate 多表批量操作总是尝试创建临时表

spring - 在 jsp 文件中使用 taglib 会抛出 500 错误

java - 计算两个字符串有多少个重复字符