2015-08-31 93 views
0

我试图使用几乎所有的HQL字符串进行删除,但我找不到问题出在哪里。我最后的尝试是:在HQL中使用MAX删除查询

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

在最大值之前缺少选择。试试这个

final String deleteString = "delete Foo l where l.id < (select max(id) from l)"; 

如上修正查询后,您将同时执行说“你不能指定目标表‘富’FOR UPDATE/FROM子句中删除” 这意味着你不能删除该行收到其他错误在Foo中,同时从同一个表Foo中选择一个最大值。所以你必须做2个查询。首先查询选择最大ID并在删除查询中使用该ID。

+0

这有帮助,谢谢。 –