2014-09-28 36 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

相关问题