2015-08-31 92 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

這有幫助,謝謝。 –