嗨,那裏我是javax.persistance的新手。主要的問題是我想刪除我的數據庫中的舊(不是最後的10000)記錄(按日期desc排序)。我無法在我通常所期望的sql語句中執行子查詢:用「in」過濾器的子查詢刪除
日誌記錄是一個包含一些信息的對象(日誌),occuredAt字段是寫入日期(日期+時間)的日期數據庫
數據庫:如果DB2是很重要的
SQL:
DELETE FROM Logging WHERE id NOT IN (SELECT id FROM Logging ORDER BY occuredAt DESC LIMIT 10000)
這是我的代碼,我試圖執行。
EntityManager em = getEntityManager();
String sql = String.format("DELETE FROM %1$s WHERE id NOT IN (SELECT id FROM %1$s ORDER BY occuredAt DESC LIMIT %2$s)",Logging.class.getName(), 10000);
Query qry = em.createQuery(sql);
return qry.executeUpdate();
但是,這是拋出一個ArgumentException。
有人可以告訴我我做錯了什麼嗎?
看看這個。看起來你不能在hql的子查詢中使用限制。 http://stackoverflow.com/questions/2738880/how-to-set-a-limit-to-inner-query-in-hibernate –
JPA查詢以[Java持久性查詢語言(JPQL)](http:///docs.oracle.com/javaee/6/tutorial/doc/bnbtg.html),而不是SQL,當然也不在底層數據庫的特定SQL方言中。 JPQL和SQL有意相似,但不完全相同。至少,您的查詢存在問題,因爲JPQL沒有「LIMIT」子句。 –
這不是有效的DB2 SQL語法;什麼_is_有效取決於DB2版本和平臺。 – mustaccio