2014-09-28 70 views
1

我想更新一個單例對象(在應用程序啓動時使用bean定義在彈簧中加載)。然而,該對象用來自數據庫(MySQL)中的表的條目加載。在數據庫更新中使用Spring和Hibernate更新單例對象

此表可以通過應用程序不時更新。

當數據庫中的某行更新時,是否可以使用spring和hibernate更新單例對象?

+1

如果它包含的數據足夠小,可以保存在內存中,每次需要時從數據庫加載狀態應該不成問題。如果真的需要,您可以隨時使用第二級緩存。 – 2014-09-28 12:03:30

+0

我不明白你的意思,說「表可以通過應用程序更新」,是應用程序意味着從同一虛擬機的其他功能?或者是否意味着另一個VM或主機可能同時寫入表?如果更改來自另一個虛擬機或主機,則當前對象已經很髒。 @JBNizet建議您每次都必須從數據庫加載它們以保持它與數據庫相同。 – 2014-09-28 14:22:56

+0

我需要使用同一虛擬機上的其他功能通過應用程序更新表。 – anurupr 2014-09-28 19:17:12

回答

1

您可以使用Hibernate事件監聽器:

  1. 檢查如何事件偵聽器添加到您的Session Factory
  2. 您可以偵聽實體持久/合併/沖刷事件。由於事件監聽器是一個Spring對象,因此可以將引用注入到單例中。
  3. 一旦你攔截了想要的事件,你可以用最新的更新數據更新單態。
+0

哪些只能在單個應用程序中使用。如果你有多個應用程序修改相同的數據,你將不會得到這些事件。 – 2014-09-29 09:53:00

+0

問題是:「此表可以通過應用程序不時更新。」 – 2014-09-29 09:58:15

+0

使用PostgreSQL,您可以獲得[數據庫通知](http://www.postgresql.org/docs/9.3/static/sql-notify.html),但他使用的是MySQL。另一個解決方法是使用JMS鏈接事件和單例更新。 – 2014-09-29 09:59:32

相關問題