2011-09-26 59 views
1

有沒有什麼辦法,使Hibernate的驅逐既是實體及其所有渴望或一個一對一關聯,而不必趕協會手動一個一個? (並且沒有在關聯上設置cascade =「evict」)。驅逐渴望協會沒有級聯=「逐出」

我經常發現這些類型的需求一旦持久層是建立和工作,我不覺得有信心在全球範圍添加這種配置對於那些關聯。我只是想在特定情況下級聯驅逐。

此外,如果有辦法從數據庫中檢索實體而沒有將它(以及它的熱切關聯)連接到會話,那就沒問題了。

我想這樣做到UI改性實體和其當前DB狀態之間執行某些比較邏輯。比較邏輯之後,UI修改的實體將始終保存。比較背後的邏輯與渴望或一對一的關聯沒有任何關係。

回答

2

您的第一個問題的答案是否定的。

我不知道爲什麼,在你的第二個問題,你不希望有連接到會議的實體。我可以看到爲什麼你不想加載一些關聯,但這正是將關聯設置爲懶惰而非渴望的目標。只是不要讓他們渴望,他們不會被加載到會話中。

+0

感謝您的意見。我不希望我從數據庫檢索到的實體被附加到會話中,因爲我有另一個實體將用於更新。我渴望一對一的關聯(並且不支持延遲加載)。無論如何,第一個問題的答案几乎讓我清楚,我必須手動驅逐所有關聯。 –

+0

只需使用合併而不是更新,一切都會好的。 –

+0

謝謝'merge'會做。我不知道我在想什麼。 –

0

寫一個新的函數,它在DB直接的比較和返回的東西是什麼?

即適合您的需求,我認爲。

+0

我不明白這對我提出的問題有什麼幫助。我想通過一次調用evict(x)來驅逐一個實體'x'及其所有的一對一關聯,並且不用全局地改變與'cascade = evict'的關聯。 –

+0

後期加載是一個在getX之後調用的函數,因此您可以在加載後立即驅除收集。 – ssedano

+0

但是,我不應該在'@ Entity'類中註釋它嗎?我不想在全球範圍內做到這一點,我只是想在特定情況下做到這一點。 –