我有一個由.net客戶端和java web服務組成的小型系統。休眠不注意從其他來源所做的數據庫更新
.NET客戶端將一個對象插入到數據庫中,然後調用Web服務。 Web服務嘗試使用hibernate檢索此對象。第一次它工作正常,但是每隔一段時間它就說沒有給定標識符的對象。
我已經手動檢查了數據庫,行確實存在! (我調試了Web服務,甚至在會話打開之前檢查了該行)。
SOLUTION
將此添加到休眠配置文件
<property name="connection.isolation">1</property>
這裏是我試過到目前爲止:
- 二級緩存被禁用
- 添加.setCacheMode(CacheMode.REFRESH)
這裏的失敗代碼:
Session session = Program.HibernateUtil.getSessionFactory().openSession();
try
{
return (Alert)session.load(Alert.class, id);
} ...
你可以打開Hibernate中的日誌記錄來查看當你調用加載時它究竟在做什麼以及它正在生成的SQL查詢嗎? – 2009-08-13 13:12:12
將日誌打印到stdout,並且生成的sql與預期一致。我甚至嘗試將其複製到一個MySQL客戶端來檢查它。問題是它說沒有給定標識符的元素。即使它是:-)所以我的猜測是,它實際上並沒有檢查數據庫,而是一些其他類型的緩存。 – l3dx 2009-08-13 13:14:34
非常感謝!我花了大約2天找到了這個問題的答案。謝謝。 – Ittai 2010-01-13 18:16:53