我想使用Spring的HibernateTemplate
(Hibernate 5.1)執行數據庫批量更新。使用HibernateTemplate和IN子句批量更新
HibernateTemplate提供以下界面:public int bulkUpdate(String,Object...)
。
我的查詢是UPDATE entity item SET item.attribute.id = ? WHERE item.id in (?.....?)
。
我有很多的麻煩,想問問什麼是正確的方法使用的HibernateTemplate
- 上面的查詢結果中的廢棄警告
[DEPRECATION] Encountered positional parameter near line 1, column 172 in HQ
- 與JPA風格的更換上面的查詢在構建參數元數據時,參數(
UPDATE entity item SET item.attribute.id = ?1 WHERE item.id in (?2,?3.....?N)
)導致Hibernate拋出NullPointerException異常 - 如one of the most authoritative Hibernate sources所示,命名參數導致誤導性異常
問題是:我如何正確使用Spring的HibernateTemplate制定批量更新查詢?正如Mykong正確報告的那樣,HibernateTemplate自動設置查詢參數0爲基礎,但最終作者得到了程序使用非定位參數的工作,而沒有提及任何警告(或根本沒有)。
感謝您指出Spring JPA。不幸的是,我不確定我們能夠很快在我們的體系結構中實現這一點(我正在開發的產品基於公司維護的,在所有開發人員之間共享的中間件)。我確實會與球隊討論這個問題,但現在我需要找到一個解決方案。查詢現在使用警告,所以我沒有被阻止。 –
@ usr-local-ΕΨΗΕΛΩΝ可能您可以訪問entityManager/session並手動執行update語句。 –