【发布时间】:2009-10-14 07:39:00
【问题描述】:
我有 2 张桌子:
orders: id
items: id, orderId, total, flag
我想使用 Hibernate Criteria (DetachedCriteria) 进行以下查询:
SELECT
o.id,
SUM(i1.total),
SUM(i2.total)
FROM
orders o
LEFT JOIN
(
SELECT
i.orderId as orderId,
SUM(i.total) as total
FROM
items i
WHERE
i.flag = 0
GROUP BY
orderId
) AS i1
ON i1.orderId = o.id
LEFT JOIN
(
SELECT
i.orderId as orderId,
SUM(i.total) as total
FROM
items i
WHERE
i.flag = 1
GROUP BY
orderId
) AS i2
ON i2.orderId = o.id
GROUP BY
o.id
我知道如何使用DetachedCriteria 在WHERE 子句中创建子查询,但是如您所见,我需要在FROM 子句中创建子查询。如果不可能,也许有办法在SELECT 子句中(SUM() 内)写,因为这个查询可以重写为这种形式。
即使我必须将原生 SQL 传递给查询,我也确实需要使用 Criteria API。
我没有向您展示类或映射,但正如您所见,这是一个非常简单的示例。
【问题讨论】:
-
您没有向我们展示类或映射,但 Criteria API 是根据对象模型而不是 SQL 来表示的。
-
是的,我已经说过了。这个例子很简单,我认为这里不需要类或映射,因为也许我的问题无法使用 Criteria API 解决。
-
您是否尝试过为此使用投影?添加映射和类总是有助于在发布前检查提示。
-
@prostynick:我的观点是,当我们不知道对象模型是什么样子时,我们如何建议您如何查询对象模型?多个外连接、聚合和子查询不利于逆向工程。
标签: java sql hibernate criteria