休眠-使用查询构建器将子查询添加到select子句

时间:2018-08-03 09:59:05

标签: hibernate query-builder hibernate-criteria not-exists

我需要选择订单并知道是否已完全收到订单。

为此,我在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

0 个答案:

没有答案