2013-03-11 54 views
0

Hibernate使用DTO的設計問題。Hibernate @Version和DTO的

在我們的一個實體上,我們使用樂觀鎖定和@Version註釋。目前的問題是,在合併版本號後不更新,直到後沖洗。這意味着它發生在我們的DTO轉換過程之外。我們最終將轉換後的DTO發送迴帶有舊版本號的客戶端。對Hibernate的後續操作現在會導致樂觀鎖定失敗,因爲Hibernate會檢查不同的db版本號。

我已經設法解決這個問題,涉及到使用ThreadLocal容器和事件偵聽器的一些竅門,但不知道是否有一個公認的最佳做法圍繞着如何處理由系統在使用業務/客戶端後刷新的屬性DTO的。

任何意見或想法讚賞, 謝謝, 尚茲

+0

在將實體轉換爲DTO之前,你不能簡單地調用flush()嗎? – 2013-03-11 15:51:22

+0

道歉應該解釋 - 試圖在標準的DAO框架內做到這一點,因此我想盡量避免儘早刷新,因爲我們可能需要適用於所有合併操作。這種行爲在我們的系統中可能並不理想。 – Andy 2013-03-11 16:17:01

回答

0

如果實體將被衆多客戶同時更新。它確實需要在客戶端視圖中保持最新版本。您需要在更改時刷新它(更新後重新加載它)。

如果該實體將僅由其所有者更新(不同時爲多個用戶)。你不需要保留最新版本的屬性。當你在服務器端進行更新時。您可以加載存儲的實體並設置需要使用DTO進行更新的流程,並且加載的PO可以在事務中自動更新。

相關問題