我正在編程一個JSP/JSF Web應用程序並且當前使用的是Hibernate(和MySQL)庫。當我使用正在運行的應用程序更新數據時,一切正常。休眠:必須重新啓動Java應用程序才能實現數據
例子:我修改客戶信息
雖然如果我手動更改數據或手動添加在MySQL的條目,則變化不會對我的申請方有效。
問題:每一次,我都要重新加載應用程序。
任何人都可以理解我的問題並找到一個快速解決方案?
我正在編程一個JSP/JSF Web應用程序並且當前使用的是Hibernate(和MySQL)庫。當我使用正在運行的應用程序更新數據時,一切正常。休眠:必須重新啓動Java應用程序才能實現數據
例子:我修改客戶信息
雖然如果我手動更改數據或手動添加在MySQL的條目,則變化不會對我的申請方有效。
問題:每一次,我都要重新加載應用程序。
任何人都可以理解我的問題並找到一個快速解決方案?
可能Hiberante緩存已啓用,需要重新加載行/對象。
或者您應該通過Hibernate更新/插入數據。
您是否在您的Web應用程序中使用了second level cache?如果是這樣,你的選擇是:
如果你不使用二級緩存,但遇到了你所描述的問題,這意味着你持有到您的會話的時間太長了。會議應 generally be short-lived。
謝謝你的信息。我想我沒有在這個應用程序中使用任何緩存。例如,當我顯示不同的付款時,它應該只在我重新加載頁面時重新加載數據... Session session = SessionFactoryUtil.getInstance()。openSession(); (「SELECT * FROM factures INNER JOIN paiements ON paiements.id_facture = factures.id_facture WHERE factures.id_membre =」+ this.membre.getIdMembre()); query.addEntity(Paiements.class).addEntity(Factures.class); List paiements = query.list(); session.close(); – wiooz 2009-12-11 20:26:05
您是否在等待您的頁面(會話等)中查詢結果?啓用hibernate SQL調試(http://docs.jboss.org/hibernate/stable/core/reference/en/html/session-configuration.html#configuration-optional),並檢查每次點擊頁面時確實執行了查詢。 – ChssPly76 2009-12-11 20:40:28
我不確定你是如何配置你的Hibernate會話的,但是一些配置要求你除了關閉會話外還要刷新會話(例如,能夠從底層JDBC連接斷開到DB的會話)。因此,在一個評論回覆,你說你結束工作,session.close();
- 嘗試這樣做:
session.flush();
session.close();
代替,看看是否可以修正你所看到的。
否則,我會檢查您是否確實沒有使用二級緩存......在您的休眠配置中明確禁用它,將hibernate.cache.provider_class
設置爲org.hibernate.cache.NoCacheProvider
。
OP運行查詢;沒有什麼可刷新的。以同樣的精神,查詢必須明確標記爲可緩存;如果沒有配置二級緩存提供程序,則不會有所作爲。 – ChssPly76 2009-12-11 21:21:59
試試這個:
Session session = SessionFactoryUtil.getInstance().openSession();
session.clear();
另外,你可以明確地使用StatelessSession,它沒有緩存。詳細信息可以在這裏找到:
https://www.hibernate.org/hib_docs/v3/api/org/hibernate/StatelessSession.html
閱讀其他的答案,這真的奇怪的意見。 您是否可以確認每次調用頁面時至少關閉一次Hibernate會話?你確定修改數據庫的其他應用程序確實提交了更改嗎?
那麼問題是我們有一個本地應用程序和一個Web應用程序使用相同的數據庫。如果我使用軟件應用程序對數據庫進行了更改,則僅當頁面重新加載時才能在Web應用程序內更新數據。 (整個應用程序必須重新加載。)我沒有發現任何配置,我做了abot休眠緩存。 – wiooz 2009-12-11 20:00:50