假设我执行了一个理论上的 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/