2012-04-10 59 views
0

如果我添加一個新對象並執行.save(),那麼運行一個select,創建的最後一個對象將從類中檢索,而不是DB,這意味着日期屬性hasn'沒有被轉換成SQL格式,並且挖掘了我的一些前端代碼。休眠,強制從數據庫中獲取對象

E.G

Tue Feb 06, 2012而不是2012-02-06 00:00:00

有沒有一種方式,以確保我的所有對象也會從數據庫中抽取的?

謝謝

+0

您是否在使用任何類型的緩存來獲取對象? – 2012-04-10 04:26:55

回答

2

Hibernate有幾級緩存。你遇到的是會話/一級緩存。無法禁用該功能。但是如果你堅持做這樣的事情,你可以使用StatelessSession http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/batch.html第15.3節。

如果您依賴數據庫將正確格式化的日期字符串返回給用戶,我建議您重新考慮將用戶界面,業務邏輯和持久層分開。只要你能理解你正在存儲/檢索的數據,你就不應該關心數據庫或Hibernate如何形成字符串。研究MVC,MVVM或任何其他分離模式。

+0

好吧,我聽到你,所以我有一個MVC archtiecture,顯示的數據在發生插入後顯示在一個完全獨立的頁面請求,這就是爲什麼我不期望發生這種情況。我使用了一個自動DTO類,它將JSON格式的對象值發回給我的JS,後者處理日期,它自動調用getDate訪問器,我猜測它調用Date.toString()方法, m獲得標準格式。所以我需要重寫Date tostring waa – Baconbeastnz 2012-04-10 22:50:59

0

默認情況下,您的get()或加載將首先從緩存中讀取,然後在數據庫中找不到數據庫時轉到數據庫。它也被添加到緩存中。你將需要session.get()與appropraite LockMode。不是默認的LockMode.NONE。

另外我相信它需要在save()和get()之間使用flush()來保證操作已經同步到數據庫。

+0

我是否正在以這種錯誤的方式進行討論,我想我會在網站期間開放會議,我想它永遠都不會關閉。我應該爲每筆交易打開並關閉它嗎? – Baconbeastnz 2012-04-10 23:13:56

+0

Right O我已經解決了這個問題,每當我提交一個對象時,我只是關閉了sesion,然後每次選擇數據庫時,我都會重新創建一個會話,我想我會這樣做,因此只有在添加或更新時關閉會話。 – Baconbeastnz 2012-04-10 23:26:51

+0

很高興它有一點幫助。 – 2012-04-11 04:16:24