2012-10-13 75 views
0

我注意到調用帶有簡單select的服務方法會使DB中的MyDomain.class日期字段更新(清除時間)。然而用@Transactional(readOnly = true)封裝方法不會更新日期值。選擇後自動保存

爲什麼將值保存到數據庫中?

這裏的服務方法

@Transactional(readOnly = true) 
Date getDate() 
{ 
    Date date = null 
    date = MyDomain.executeQuery("select min(s.startDate) from MyDomain s where ....)[0] 
    print "Result: " + date 

} 
+0

提供了MyDomain類的定義,您可能已經通過讀取方式更新自己的方式來定義它。另外..有可能你的查詢返回不同的對象,因此日期是不同的? – Krystian

回答

2

對象將只在數據庫中保存更新,如果以某種方式改變後,進入休眠會話(選擇)和會話時(通常是在之前方法的結尾)。看看你的對象,並看看它可能會以某種你不打算修改的方式。

+0

實際上對象沒有改變。在事務結束之前,我添加了print語句來檢查從數據庫中檢索到的結果。 結果如下: 1.無@Transactional(readOnly = true)結果:2012-10-20 00:00:00.0 2.使用@Transactional(readOnly = true):2012-10-20 17: 00:00.0 – syllepsa