您好,我是 javax.persistance 的新手。主要问题是我想删除数据库中旧的(不是最后 10000 条)记录(按日期 desc 排序)。我无法在我通常期望的 sql 语句中执行子查询:
Logging 是一个包含一些信息的对象(日志),occurredAt 字段是写入数据库的日期(日期+时间)
数据库: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。
谁能告诉我我做错了什么?
最佳答案
您应该为 SQL 执行em.createNativeQuery
em.createQuery
适用于 JP QL(Java 持久性查询语言),不适用于 SQL
关于java - 使用 "in"过滤器的子查询删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41285649/