将提取更改为EAGER似乎可以修复无关的会话缓存问题

这不是一个“它破碎”的问题。 这是为什么不打破?! 题。 不幸的是,需要一些上下文。

之前我问了一个问题,我想如何覆盖Hibernate的第一级缓存,以便获得新更新的JobStatus实体的数据而不是缓存(但是陈旧的)版本。 我得到了两条有用的评论:首先,我应该在服务方法上尝试@Transactional(propagation = Propagation.REQUIRES_NEW) ; 第二,在尝试分离线程来处理某些东西时,我调用了thread.run()而不是thread.start() ,它运行代码但是在同一个线程上。

应用这些建议后,我发现REQUIRES_NEW似乎没有做任何事情,并且thread.start()产生了ERROR: org.hibernate.LazyInitializationException failed to lazily initialize a collection of role: DataSourceResults

现在,作为实验,我将DataSourceResults中的集合字段的加载更改为EAGER 。 这不仅修复了LazyInitializationException,而且修复了过时的会话缓存问题,即使这是一个完全不同的实体类型 JobStatus。 我的问题基本上是:

这怎么可能?

供参考:所涉及实体的ORM XML。

                         <!----> <!---->   

         TIMESTAMP