使JPA EntityManager会话无效 [英] Invalidating JPA EntityManager session

查看:278
本文介绍了使JPA EntityManager会话无效的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用的一个项目使用Spring 2.5&使用Hibernate作为提供者的JPA。



我的DAO类扩展了JpaDaoSupport,所以我使用getJpaTemplate()方法得到我的JpaTemplate。



数据库可以通过我的应用程序或第三方应用程序进行更改。



当第三方应用程序更改数据库(主要是配置数据更改)时,我需要为应用程序的用户提供一种使所有JPA会话无效并重新加载新数据(即,使后台中的所有休眠会话无效)。这需要我的应用程序的所有并发用户看到。



我该怎么做?

解决方案

有两级缓存:第一级是EntityManager自己的缓存。

您可以在一个实体上 refresh ,它将从数据库重新加载,或者您可以 clear 实体管理器本身,在这种情况下,所有实体都从缓存中移除。 JPA无法驱逐一个特定的实体从缓存中。根据您使用的实施情况,您可以执行此操作,例如Hibernate的 evict 方法。

  • 二级缓存是全局缓存。



    JPA 1.0没有提供对二级缓存的支持。然后您需要依赖基础的特定实现,或者禁用它。使用 @Cache JPA 2.0将解决此问题 c $ c>注释和缓存API。您可以使用特定于Hibernate的API清除二级缓存,例如 SessionFactory.evict(...)



  • $

    高级缓存问题包括:

    查看全文
    登录 关闭
    扫码关注1秒登录
    发送“验证码”获取 | 15天全站免登陆