我正在尝试使用set子句中的subselect在hibernate HQL中进行更新,如:
update UserObject set code = (select n.code from SomeUserObject n where n.id = 1000)
它不工作,不支持?
由于
乌
答案 0 :(得分:3)
来自Hibernate文档:
13.4. DML-style operations
...
UPDATE
和DELETE
的伪语法( UPDATE | DELETE ) FROM? EntityName (WHERE where_conditions)?
语句为:FROM
。需要注意的一些要点:
- 在from-clause中,
UPDATE Cat c SET c.weight = (SELECT SUM(f.amount) FROM Food f WHERE f.owner = c)
关键字是可选的- 在from子句中只能有一个实体。它可以, 但是,别名。如果是实体 name是别名,然后是任何属性 参考必须使用合格 别名。如果实体名称不是 别名,然后它是非法的 属性引用是合格的。
- 无法在批量中指定隐式或显式的连接 HQL查询。 可以使用子查询 在where子句中,其中 子查询本身可能包含 联接。强>
- where子句也是可选的。
虽然文档没有明确提到对set set的限制,但可以解释只在where子句中支持子查询。但是......
我发现了一个关于批量更新问题的4年(叹息)问题(HHH-1658),据记者了解,以下工作:
{{1}}
我想知道在from子句中使用别名是否有帮助。看起来无论如何都有些奇怪。
答案 1 :(得分:3)
我遇到了同样的问题,发现你需要在交易中放置批量更新:
tr = session.getTransaction();
tr.begin();
updateQuery.executeUpdate();
tr.commit;