本文介紹了使用Hibernate限制刪除查詢的處理方法,對(duì)大家解決問(wèn)題具有一定的參考價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧!
問(wèn)題描述
我想創(chuàng)建一個(gè)新功能,以編程方式從表中刪除行,并限制行數(shù)。這可能是數(shù)千個(gè)要?jiǎng)h除的元素。使用的數(shù)據(jù)庫(kù)為Oracle。
主要問(wèn)題是HQL不支持limit
或rownum
fordeletes
之類的內(nèi)容。我們只有select
的setMaxResults
。
我考慮的解決方案是:
-
使用
select
,然后循環(huán)列表,使用delete
刪除列表中的每個(gè)元素。使用
session.createSQLQuery
以便能夠在查詢中使用limit
。
第1點(diǎn):我想避免這種情況,因?yàn)槲也幌矚g在事后將元素帶到內(nèi)存中刪除,因?yàn)樵乜梢允侨魏螖?shù)字(例如1000000),我對(duì)元素的數(shù)量沒(méi)有限制。我是否遺漏了什么,我可以幫助我解決此問(wèn)題?
第二點(diǎn):我不知道session.createSQLQuery
和session.createQuery
有什么性能差異,使用session.createSQLQuery
有什么不便嗎?
推薦答案
其他選項(xiàng)
您可以嘗試迭代/加載每個(gè)對(duì)象并將其刪除。(看起來(lái)很丑!)
或
您可以編寫兩個(gè)單獨(dú)的HQL查詢,其中第一個(gè)查詢的結(jié)果被提供給另一個(gè)查詢(執(zhí)行實(shí)際的刪除)。
這篇關(guān)于使用Hibernate限制刪除查詢的文章就介紹到這了,希望我們推薦的答案對(duì)大家有所幫助,