如何在HQL更新中使用join?

时间:2009-10-07 12:02:34

标签: java hibernate join

我知道如何在SQL更新中连接表但是如何在HQL中进行?

长篇故事:我有一些我在跑步中处理的物品。每次作为ID运行,我在项目和运行之间有多对多关系(在额外的表格中)。

现在我想设置某个运行中使用的所有项目的状态。天真的方法看起来像这样:

update Items item
set item.statue = :done
where item.state = :new
  and :run in item.runs

最后一行不起作用。 Hibernate无法将运行包变成可以在where子句中使用的东西。解决方案是什么?

1 个答案:

答案 0 :(得分:4)

尝试将 item.runs 更改为元素(item.runs)。但是,我不确定它是否适用于更新,因为HQL更新中的连接通常需要在子选择中表示。因此,如果它不起作用,请尝试类似:

update Items i1
set i1.statue = :done
where i1.state = :new
and i1 in (
  select i2
  from Items i2
  where :run in elements(i2.runs)
)