java - 使用 "in"过滤器的子查询删除

标签 java orm db2 persistence

您好,我是 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/

相关文章:

java - 池塘嵌套循环中的简单java鱼

Java USB 库

java - 如何使用 github api 检索 repo 的所有贡献者

python - 列更新时的 sqlalchemy 事件

javascript - sequelize.js 自定义验证器,检查唯一的用户名/密码

java - 使用 Apache Commons I/O 将数据附加到文件中

java - hibernate = 找不到列

node.js - 如何使用nodejs和ibm_db包从DB2中的表中获取最后一个插入ID

c# - 无法加载 DLL 'db2app64.dll'

db2 - 如何在 DB2 中找出当前的事务日志大小?