在一个语句中删除多行

时间:2011-12-07 05:41:46

标签: java hibernate jpa sql-delete

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

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

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

同样的问题适用于 Hibernate JPA 。如果有任何建设来解决这个问题?因为现在我使用类似批处理:在数组和提交事务的每个id上添加查询会话

1 个答案:

答案 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?获得。

相关问题