【发布时间】:2011-11-17 08:10:14
【问题描述】:
我需要编写查询。这是一个简化的问题: 有命名的篮子。其中有水果(0个或更多)。篮子有所有者(1 个或多个)。水果也有所有者(1 个或多个)。我想在 Joe 的篮子中获取 Joe 的水果列表,包括 Joe 的篮子中没有任何 Joe 的水果。我们开始:
select basket.name, fruit.name from Owner owner
join owner.baskets basket
left outer join basket.fruits fruit WITH OWNER in (FRUIT.OWNERS)
where owner.id = joe_id
但是...它在 HQL 中不起作用。它只是看起来不错。 SQL 很简单。
所以,问题是: 如何在 HQL 或标准 API 中加入多个条件 (使用休眠 3.3)。
我需要分页,所以我以后无法取空篮子,因为我无法计算哪些项目应该在哪些页面上。我目前的解决方案是原生查询,但一定有办法……
【问题讨论】:
-
来自休眠的实际错误消息在这里会很有帮助...
-
我在任何地方都找不到示例堆栈跟踪,但它说这个查询是不正确的,因为 WITH 子句结合了查询 AST 树的两个不同分支的条件,或者沿着这条线。无论如何,如果两个条件都与同一个对象相关,则 WITH 子句有效:
left join cat.kittens as *kitten* with *kitten*.bodyWeight > 10.0(来自休眠文档的示例)。实际上,每当我需要使用 WITH 时,它都不起作用;)
标签: sql hibernate hql criteria outer-join