我曾尝试使用几乎所有的HQL字符串进行此删除,我无法找出问题所在。我的最后一次尝试是:
final String deleteString = "delete Foo l where l.id < (max(id) from l)";
final Query query = this.getEntityManager().createQuery(deleteString);
final int deleted = query.executeUpdate();
我得到了这个:
org.hibernate.hql.ast.QuerySyntaxException: unexpected token: from near line 1, column 73 [delete eu.unicorn.ctds.entity.Foo l where l.id < (max(id) from l)
哪里可能是问题?
答案 0 :(得分:1)
在最大值之前缺少选择试试这个
final String deleteString = "delete Foo l where l.id < ( select max(id) from l)";
如上所述更正查询后,执行时会出现另一个错误:#34;您无法指定目标表&#39; Foo&#39;用于FROM子句中的更新/删除&#34; 这意味着在从同一个表Foo中选择最大值时,您无法删除Foo中的行。所以你必须做2个查询。第一个查询选择最大ID并在删除查询中使用该ID。