hibernate二级缓存的问题

chen_2001 2010-08-05 11:17:14
hibernate已经加入二级缓存机制,当操作数据库时,缓存不能同步,大家有什么好办法


在一个多对多的关系中,如用户和组,中间表用户组表,如果在组管理界面中添加一个用户,数据库的确修改了,可在用户管理界面确看不到这个组???
我的理解是:数据库中中间表修改了,可是中间表的缓存并没有修改,所以通过缓存查到的数据并没有修改????

请高手指点一下,怎么办?
...全文
102 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
king138888 2010-08-06
  • 打赏
  • 举报
回复
同意楼上:放弃hibernate缓存,例如自己操作缓存,其说说白了,缓存就是个Map,自己操作缓存也并非难事.
将一些不常变的数据放入map中是一种很好的做法
dada_fangfang 2010-08-06
  • 打赏
  • 举报
回复
大致明白你的意思,以前我也考虑过类似的问题,有时候hibernate并没有理想的优秀。
方法一:定时重置缓存,每隔一段时间就重新缓存中间表数据,虽然感觉很可笑,但是也是一种方法。
方法二:放弃hibernate缓存,例如自己操作缓存,其说说白了,缓存就是个Map,自己操作缓存也并非难事.
个人见解,仅供参考
fei381895649fei 2010-08-06
  • 打赏
  • 举报
回复
1.首先你要明白,什么样的数据适合存放到第二级缓存中..
1.1) 很少被修改的数据
1.2) 不是很重要的数据,允许出现偶尔并发的数据
1.3) 不会被并发访问的数据
1.4) 参考数据,指的是供应用参考的常量数据,它的实例数目有限,它的实例会被许多其他类的实

2.在你做修改的时候,如果你的二级缓存没有同时更新的话,这样当然是看不到的,而且删除、增加数据的时候也一样要同时更新二级缓存

3.所以说,你这样是依赖二级缓存,产生的错误...你试试同时更新,二级缓存,应该就没有问题!!!
colin_pxx 2010-08-06
  • 打赏
  • 举报
回复
楼主的理解是正确的 像这种经常要修改的东西不应该放入缓存中
closewbq 2010-08-05
  • 打赏
  • 举报
回复
当我们进行了修改操作的时候,这时我们可以对二级缓存进行清理
SessionFactory sf
Map<String, CollectionMetadata> map = sf.getAllCollectionMetadata();
for (String name: map.keySet()) {
sf.evictCollection(name);
}
这样确保下次查询的时候可以从数据库中查询,当没有执行修改操作的时候,二级缓存中的数据依然存在,那么我们依然可以利用缓存读取。
本书由互联网上影响广泛的开放文档OpenDoc系列自由文献首份文档“Hibernate开发指南”发展而来。在编写过程中,进行了重新构思与组织,同时对内容的深度与广度进行了重点强化。本书从持久层入手,引出对象/关系数据库映射的由来,接下来聚焦于目前最完善、最强悍的ORM产品——Hibernate。从一个基础程序入手,讲述Hibernate的基本语法与配置,慢慢升高到缓存、延迟加载等高级特性。本书内容深入浅出,先讲述持久层设计与ORM,再由Hibernate概述、Hibernate基础Hibernate高级特性顺序展开,直至Hibernate实战,重点讲述了Hibernate的基础语法、基础配置、O/R映射、数据关联、数据检索、HQL实用技术、自定义持久化实现、Hibernate回调与拦截、Hibernate分页等实用技术,Hibernate实战部分则用一个真实论坛的创建演示了Hibernate的强大功能。本书有丰富的附录部,在附录中讲述了Hibernate常用的映射配置,Hibernate工具、XDoclet模板配置以及Hibernate的益友iBatis用法,还以卡片的形式列出了本书中所用的工具及软件,附录最后一部分是“快速启动代码”,供读者对比与参考,也给初学者提供了一个快带起步的基础。本书适合于Hibernate的各个阶层的读者。 注:因为资源有点大,所以折分上传,需要把深入浅出hibernate(PDF)第一部分.深入浅出hibernate(PDF)第二部分,深入浅出hibernate(PDF)第三部分全部下载,并解压到一个地方才可以正常解压阅读.给大家带来不便望谅解.
这是一个实际使用中的项目,可访问 http://cdbke.cuit.edu.cn 可查看效果及功能,后台需要登录后才能使用(出于安全性考虑这里就不给大家介绍了,另外还有一个struts1版本的,如有需要可以与我联系)。 此项目整合了目前主流和最前源的web开发技术:采用ehcache实现二级缓存(包含查询缓存);用sf4j及logback(log4j的升级版)记录日志;proxool(据说是dbcp和c3p0三者中最优秀的)做连接池;使用jquery的ajax实现仿google人名自动补全;头像上传剪切压缩处理。 包含有完整的jar包和源代码,可以直接下载编译部署和运行,这是专门为我们实验室定制开发的。虽然后台逻辑并不复杂,但已经包含了架构基于s2sh技术型系统的全部基础部分:如分页,缓存,文件上传,连接池等。很适合学习使用,希望对初学JavaEE WEB开的人有所帮助。 这个资源在去年发布了第一版,已经有很多朋友下了觉得对他们有帮助,所以我才再发了一个第二版,希望对有需要的朋友有所帮助。本版本全面更新了jar包,全部使用了当前最新版本的jar包,struct2.1.8 spring3 hibernate3.5,全面使用注解取代xm的l配置。 另外增加了一个ant构建脚本,支持使用hudson完成每日构建,持续集成,自动测试,代码规范检查,代码审查等功能(与此相关的jar包由于上传文件大小限制未导入) 本系统一直在使用中,所以还会不段更新,之后我打算再做一个基于javaee6的实现,给需要想学习ejb3.1等技术的朋友一个参考实现 集成测试相关jar包和更新构建脚本下载:http://download.csdn.net/source/2427972

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧