Java 如何创建一个hibernate集合,每次请求时都会重新读取它?

Java 如何创建一个hibernate集合,每次请求时都会重新读取它?,java,hibernate,configuration,caching,Java,Hibernate,Configuration,Caching,我有一个实体,它有一个与之关联的状态表。状态表由另一个进程管理,它包含我的业务逻辑必须处理的对象列表。我希望在每次重新加载实体时获得状态表的新快照。如何确保Hibernate或其支持库的任何部分都不会缓存此表的任何值?基本上,每次调用getMyStateValues(),我都希望获得集合的新视图。Hibernate的主要目的是防止这种情况发生,并返回给定事务范围内实体状态的一致视图。因此,要么在每次不同的事务中重新加载整个实体。或者,如果需要在业务事务期间重新加载状态表,请在单独的Hiberna

我有一个实体,它有一个与之关联的状态表。状态表由另一个进程管理,它包含我的业务逻辑必须处理的对象列表。我希望在每次重新加载实体时获得状态表的新快照。如何确保Hibernate或其支持库的任何部分都不会缓存此表的任何值?基本上,每次调用getMyStateValues(),我都希望获得集合的新视图。

Hibernate的主要目的是防止这种情况发生,并返回给定事务范围内实体状态的一致视图。因此,要么在每次不同的事务中重新加载整个实体。或者,如果需要在业务事务期间重新加载状态表,请在单独的Hibernate会话中仅按父实体的id加载状态表。

您可以在实体中创建查询数据库并返回集合的方法。getXYXReload()。这不是一个很好的设计决策,我想。

你可以使用Hibernate的。它允许您指导hibernate会话如何与缓存交互。您可以通过以下方式访问基础会话:

@PersistenceContext EntityManager manager;
...
org.hibernate.Session session = (Session)manager.getDelegate();

不幸的是,这种技术适用于整个会话,而不是特定于实体。

我可以认为这意味着如果我提交正在进行的事务,我对集合的下一次读取将包含新值吗?我使用Spring的事务管理,因此,我不确定提交事务是否有效,或者您是否应该在我脑海中创建一个新会话。但是,它应该清除第一级缓存。但是,如果您使用的是二级缓存,那么二级缓存可能仍然会启动。默认情况下不应使用。这应该很容易通过在同一数据库上打开测试应用程序和SQL控制台进行验证。