das*_*asp 8 session spring hibernate jpa invalidation
我正在开发的项目使用Spring 2.5和JPA,Hibernate作为提供者.
我的DAO类扩展了JpaDaoSupport,所以我使用getJpaTemplate()方法得到了我的JpaTemplate.
后端数据库可以通过我的应用程序或第三方应用程序进行更改.
当第三方应用程序更改数据库(主要是配置数据更改)时,我需要为我的应用程序的用户提供一种方法来使所有JPA会话无效并重新加载新数据(即在后台使所有hibernate会话无效).这需要我的应用程序的所有并发用户"看到".
我怎样才能做到这一点?
ewe*_*nli 23
有两个级别的缓存:
第一级是EntityManager自己的缓存.
您可以refresh在一个实体上,也可以从数据库重新加载,或者您可以clear在实体管理器本身,在这种情况下,所有实体都将从缓存中删除.JPA无法从缓存中驱逐一个特定实体.根据您使用的实现,您可以执行此操作,例如Hibernate的evict方法.
二级缓存是全局缓存.
JPA 1.0没有提供对二级缓存的支持.然后,您需要依赖底层的特定实现,或者禁用它.JPA 2.0将通过@Cache注释和缓存API 解决此问题.您可以使用特定于Hibernate的API清除二级缓存,例如SessionFactory.evict(...).
缓存的高级问题是:
查询缓存
可以缓存某些查询的结果.在JPA 1.0中再次不支持它,但是大多数实现都有方法来指定缓存哪个查询以及如何缓存.
聚类
然后还出现了在群集中的节点之间同步缓存的繁琐问题.在这种情况下,这主要取决于所使用的缓存技术,例如JBoss缓存.
你的问题仍然是某种通用的,答案将取决于你正在做什么.
我在一个系统上工作了很多更新都是在不经过hibernate的情况下完成的,我们最终禁用了二级缓存.
但您也可以跟踪所有打开的会话,并在必要时逐出所有已打开会话的所有第一级缓存,再加上第二级缓存.你仍然需要自己管理同步,但我想这是可能的.
| 归档时间: |
|
| 查看次数: |
17983 次 |
| 最近记录: |