【发布时间】:2010-10-22 08:39:28
【问题描述】:
我有一个实体,它有一个与之关联的状态表。状态表由另一个进程管理,并包含我的业务逻辑必须处理的对象列表。每次重新加载实体时,我都想获得状态表的新快照。如何确保 Hibernate 或其支持库的任何部分曾经 不会缓存此表的任何值?基本上,我想在每次调用 getMyStateValues () 时获得集合的新视图。
【问题讨论】:
标签: java hibernate configuration caching
我有一个实体,它有一个与之关联的状态表。状态表由另一个进程管理,并包含我的业务逻辑必须处理的对象列表。每次重新加载实体时,我都想获得状态表的新快照。如何确保 Hibernate 或其支持库的任何部分曾经 不会缓存此表的任何值?基本上,我想在每次调用 getMyStateValues () 时获得集合的新视图。
【问题讨论】:
标签: java hibernate configuration caching
Hibernate 的主要目的是防止这种情况发生并返回给定事务范围内实体状态的一致视图。因此,要么每次在不同的事务中重新加载整个实体。或者,如果您需要在业务事务期间重新加载状态表,则在单独的 Hibernate 会话中仅按父实体的 id 加载状态表。
【讨论】:
您可以在您的实体中创建一个查询数据库并返回集合的方法。获取XYXReload()。这不是一个很好的设计决定,我想。
【讨论】:
您可以使用 Hibernate 的CacheMode。它允许您指示休眠会话如何与缓存交互。您可以通过以下方式访问底层会话:
@PersistenceContext EntityManager manager;
...
org.hibernate.Session session = (Session)manager.getDelegate();
不幸的是,这种技术适用于整个会话,而不是专门适用于实体。
【讨论】: