我正在尝试使用jpql执行以下批量删除:
" DELETE " +
" FROM AutAnt aa " +
" JOIN aa.person p " +
" JOIN p.employees e" +
" WHERE e = :employess " +
" AND (" +
" aa.dateFrom BETWEEN :dateStart AND :dateEnd" +
" OR" +
" aa.dateTor BETWEEN :dataStart AND :dateEnd" +
" )");
但是我收到了这个错误:
unexpected token: JOIN
JPA docs状态“按查询删除使用与普通查询相同的JPQL语法,但有一个例外:使用delete关键字而不是select关键字开始查询字符串”
我有以下选择查询,它完美无缺:
" SELECT aa " +
" FROM AutAnt aa " +
" JOIN aa.person p " +
" JOIN p.employees e" +
" WHERE e = :employess " +
" AND (" +
" aa.dateFrom BETWEEN :dateStart AND :dateEnd" +
" OR" +
" aa.dateTor BETWEEN :dataStart AND :dateEnd" +
" )");
将删除查询的第一个语句更改为“删除aa”会引发另一个异常。
这是一个Hibernate错误,还是我在这里遗漏了一些东西。
干杯!
答案 0 :(得分:0)
Hibernate批量DML操作不支持联接。来自documentation:
否Section 16.4, “Forms of join syntax”,隐式或 显式,可以在批量HQL查询中指定。子查询可以 在where子句中使用,子查询本身可以包含 联接。
正如文档中所建议的,您可以在子查询的帮助下在语义上编写相同的语句:
delete AutAnt where id in
(select aa.id from AutAnt aa join aa.person p ...)