Hibernate 会话在请求之间持续存在
Hibernate session persisting between requests
我在一个系统上工作,在这个系统上,事情可以并且将会在 JPA 之外发生变化,所以我需要为每个请求创建一个新会话,但是我部署到 TomEE 中的 JavaEE 应用程序会在请求之间保留会话,从而导致实体被缓存当它们在应用程序之外的某个地方更新时。
我试图创建一个 cfg.xml 并以这种方式获取会话工厂,但遇到了异常。我还尝试解包实体管理器 class 以这种方式获取工厂,但出现异常,提示 class 无法解包。我觉得这可能与 TomEE 和 Hibernate 的交互方式有关。我当前的设置有问题吗?还是我试图错误地实施 session-per-request,
你遇到的问题不是会话,它与会话缓存有关,所以你可以做的是使你的会话缓存无效:
session.refresh(entity)
然后 hibernate 将比较数据库数据和实体对象数据,如果存在差异,则它将再次执行 sql 查询。
session.clear()
将从会话缓存中删除所有内容,因此您不会得到旧数据。
我在一个系统上工作,在这个系统上,事情可以并且将会在 JPA 之外发生变化,所以我需要为每个请求创建一个新会话,但是我部署到 TomEE 中的 JavaEE 应用程序会在请求之间保留会话,从而导致实体被缓存当它们在应用程序之外的某个地方更新时。
我试图创建一个 cfg.xml 并以这种方式获取会话工厂,但遇到了异常。我还尝试解包实体管理器 class 以这种方式获取工厂,但出现异常,提示 class 无法解包。我觉得这可能与 TomEE 和 Hibernate 的交互方式有关。我当前的设置有问题吗?还是我试图错误地实施 session-per-request,
你遇到的问题不是会话,它与会话缓存有关,所以你可以做的是使你的会话缓存无效:
session.refresh(entity)
然后 hibernate 将比较数据库数据和实体对象数据,如果存在差异,则它将再次执行 sql 查询。
session.clear()
将从会话缓存中删除所有内容,因此您不会得到旧数据。