2011-12-07 69 views
1

我在數據庫中有一些簡單的表(比如說Oracle10g),我需要實現在DAO刪除多條記錄的能力。方法remove()接收一個ids(整數)數組作爲參數。在一條語句中刪除多行

現在我有一個查詢字符串"DELETE FROM news WHERE id = ?",我使用PreparedStatement。我只需爲陣列中的每個ID添加批處理,然後在PreparedStatement上執行執行。

我想知道是否有能力通過一個查詢語句來執行它,比如"DELETE FROM news WHERE id IN ?"。但我找不到如何正確設置整數數組而不是'?'

同樣的問題適用於休眠JPA。如果有任何解決辦法可以解決這個問題?因爲現在我使用類似批處理的方式:在陣列和提交事務的每個id上添加查詢會話

+0

看到這個答案:http://stackoverflow.com/a/189399/851432。它指向一個[鏈接](http://www.javaranch.com/journal/200510/Journal200510.jsp#a2),在這種情況下這可能很有用。 – Jomoos

回答

4

我所見過的最好的方法是動態構建PreparedStatement使用的字符串,插入適當的#?,序列,然後使用for循環根據每行調用setInt - 每行將被刪除你的情況。

JPA爲此提供了一種特殊語法(可以接受一個Collection來填充參數列表),因爲它必須創建SQL,並且可能與我剛描述的類似。關於API調用(針對JPA和HQL)的細節可在Hibernate HQL Query : How to set a Collection as a named parameter of a Query?處獲得。

+0

謝謝,這非常有幫助。 –