将提取更改为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