DELETE A a WHERE a.relation.id IN (SELECT r.id FROM Relation r WHERE r.property = "dummy");
对于你的例子来说,它有点复杂,但下面的查询应该可以工作(在HSQL db中测试):
UPDATE A a SET a.column3 = (SELECT b.column3 FROM B b WHERE a.column1 = b.column1 and a.column2 = b.column2) WHERE a.id IN (SELECT a.id FROM A a, B b WHERE a.column1 = b.column1 AND a.column2 = b.column2)
此查询在HSQL db中有效,但在MySQL中失败。看起来唯一可能的解决方案是使用两个单独的查询:
List<String> list = em.createQuery("SELECT a.column1 FROM A a, B b WHERE a.column1 = b.column1 AND a.column2 = b.column2").getResultList();
em.createQuery("UPDATE A a SET a.column3 = (SELECT b.column3 FROM B b WHERE a.column1 = b.column1 and a.column2 = b.column2) WHERE a.column1 IN :list").setParameter("list", list).executeUpdate();
1条答案
按热度按时间pu82cl6c1#
来自Hibernate 4.1.9手册-关于批量更新和删除的部分:
在批量HQL查询中不能指定隐式或显式联接。子查询可以在where子句中使用,其中子查询本身可以包含连接。
不支持(隐式联接):
一条路要走:
对于你的例子来说,它有点复杂,但下面的查询应该可以工作(在HSQL db中测试):
此查询在HSQL db中有效,但在MySQL中失败。看起来唯一可能的解决方案是使用两个单独的查询:
最后一个解决方案在mysql中进行了测试,效果很好,但是在你的情况下,你必须根据你的用例定制第一个选择查询-我的例子期望a.column1是唯一的(使用column 1而不是id来避免主键)。