【问题标题】:Deleting multiple rows in a one statement在一个语句中删除多行
【发布时间】:2012-01-14 16:53:54
【问题描述】:

我在数据库中有一些简单的表(比如说 Oracle10g),我需要在 DAO 中实现删除多条记录的能力。方法remove() 接收一个id 数组(整数)作为参数。

现在我有一个查询字符串 "DELETE FROM news WHERE id = ?",我在 PreparedStatement 中使用它。我只需为数组中的每个 id 添加批处理,然后在 PreparedStatement 上执行。

我想知道是否有能力通过一个查询语句来执行它,比如"DELETE FROM news WHERE id IN ?"。但我找不到如何正确设置整数数组而不是'?'

同样的问题也适用于 HibernateJPA。如果有任何结构可以解决这个问题?因为现在我使用类似批处理的方式:在数组中的每个 id 上添加 QuerySession 并提交事务。

【问题讨论】:

标签: java hibernate jpa sql-delete


【解决方案1】:

我见过的最好的方法是动态构建 PreparedStatement 使用的字符串,插入正确的 # of ?, 序列,然后使用 for 循环根据每一行调用 setInt - 每行在你的情况下被删除。

JPA 为此提供了一种特殊的语法(可以接受Collection 来填充参数列表),因为它无论如何都必须创建 SQL - 并且可能与我刚刚描述的方式非常相似。有关 API 调用(针对 JPA 和 HQL)的详细信息,请访问 Hibernate HQL Query : How to set a Collection as a named parameter of a Query?

【讨论】:

  • 谢谢,这很有帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-11-26
  • 2021-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-20
  • 1970-01-01
相关资源
最近更新 更多