您好我是javax.persistance的新手。主要问题是我想删除数据库中的旧记录(不是最后10000个)(按日期desc排序)。我无法在我通常期望的sql语句中执行子查询:
日志记录是包含一些信息的对象(日志),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。
有谁能告诉我我做错了什么?
答案 0 :(得分:1)
您应该为{<1}}执行SQL
em.createNativeQuery
适用于JP QL(Java持久性查询语言),不适用于SQL
答案 1 :(得分:0)
像这样修改您的查询
DELETE FROM Logging WHERE id NOT IN (SELECT id FROM Logging ORDER BY occuredAt DESC fetch first 10000 rows only)