2009-01-23 82 views
0

我正在使用hibernate來存儲來自Web服務的一組對象。休眠刷新不會更新數據庫

由於每個對象都被接收,所以我使用休眠來保存它們。

接收對象包裝在一個事務中,並且在收到最終對象後所有對象都出現在數據庫中。

我現在試圖讓每個對象在保存時出現在數據庫中。我試圖做到這一點

getHibernateTemplate().saveOrUpdate(foo); 

getHibernateTemplate().flush(); 
getHibernateTemplate().clear(); 

我的理解是應該刪除hibernate的緩存值並將值寫入數據庫。

任何學習或指導?

回答

1

感謝Brian的幫助。問題原來是另一個包裝保存調用的類中的for循環。

解決方案是刪除for循環並用iterator替換它。

Hibernate爲整個for循環保持相同的事務。使用iterator,Hibernate似乎開始一個新的事務,因此在開始下一個事務之前執行對數據庫的提交,然後進行刷新。

1

如果您仍在一個事務中,那麼只有打開該事務的會話或連接才能看到記錄。在某些數據庫中,如果執行髒/未提交的讀操作,應該從另一個會話中看到它們。我會嘗試在flush之後使用相同的Hibernate會話來運行select,以確認它確實在數據庫中。只是不要通過主鍵進行查詢,或者您可以從緩存中獲取它。