我在数据库中有一些简单的表(比如Oracle10g),我需要在 DAO 上实现删除多个记录的能力。方法remove()
作为参数接收id(整数)数组。
现在我有一个查询字符串"DELETE FROM news WHERE id = ?"
,我在 PreparedStatement 中使用它。我只是为数组中的每个id添加批处理,然后在 PreparedStatement 上执行执行。
我想知道是否有能力通过一个查询语句执行它,例如"DELETE FROM news WHERE id IN ?"
。但我找不到如何正确设置整数数组而不是'?'
。
同样的问题适用于 Hibernate 和 JPA 。如果有任何建设来解决这个问题?因为现在我使用类似批处理:在数组和提交事务的每个id上添加查询到会话。
答案 0 :(得分:4)
我见过的最好的事情是动态构建PreparedStatement使用的String,插入正确的?,
序列#,然后使用for循环为每行调用setInt
- 在你的情况下要删除的每一行。
JPA为此提供了一种特殊的语法(可以接受Collection
来填充参数列表),因为它无论如何都必须创建SQL - 并且可能与我刚才描述的非常类似。有关API调用的详细信息(适用于JPA和HQL)可在Hibernate HQL Query : How to set a Collection as a named parameter of a Query?获得。