我知道如何在SQL更新中连接表但是如何在HQL中进行?
长篇故事:我有一些我在跑步中处理的物品。每次作为ID运行,我在项目和运行之间有多对多关系(在额外的表格中)。
现在我想设置某个运行中使用的所有项目的状态。天真的方法看起来像这样:
update Items item
set item.statue = :done
where item.state = :new
and :run in item.runs
最后一行不起作用。 Hibernate无法将运行包变成可以在where子句中使用的东西。解决方案是什么?
答案 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)
)