我需要选择订单并知道是否已完全收到订单。
为此,我在SELECT
子句中使用带有NOT EXISTS
的子查询来排除包含未收到产品的订单。
可以对该查询进行参数设置,以选择特定提供商的订单和/或某个日期之前的订单。
我尝试使用休眠查询生成器使用结果转换器(example)在自定义类OrderDTO中检索这些结果。
使用SQL会是这样的:
SELECT o.id_order,
o.provider,
o.date,
NOT EXISTS (
SELECT id_product
FROM product p
WHERE p.received IS FALSE
AND p.id_order = o.id_order
) AS fully_received
FROM order o
WHERE o.date >= :dateMin
AND o.provider = :provider
ORDER BY o.date DESC
到目前为止,我的代码如下:
...
Criteria ordersCriteria = session.createCriteria(Order.class, "o")
.add(Restriction.eq("o.provider", providerParameter.getValue())
.add(Restriction.ge("o.date", dateParameter.getValue())
.setProjection(Projections.projectionList()
.add(Projections.property("o.id"), "order_id")
.add(Projections.property("o.provider"), "provider")
.add(Projections.property("o.date"), "date")
.add(__HELP_ME_PLEASE__, "fully_received")
)
.setResultTransformer(Transformers.aliasToBean(OrderDTO.class));
...
我的问题是我不了解如何将子查询添加到projectionList以适合ResultTransformer
。