在HQL中使用MAX删除查询

时间:2015-08-31 07:03:19

标签: hibernate hql sql-delete

我曾尝试使用几乎所有的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)

哪里可能是问题?

1 个答案:

答案 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。