hibernate缓存问题?

cncba 2006-09-09 11:17:02
使用HIBERNATE遇到两个比较奇怪的问题,不知道如何解决。
1. 更新过一个对象后,并提交了事件,然后刷新页面后,该对象的值随机性的显示为新的值或老的值。
比如大概过程如下:
User user=session.get(User.class,new Integer(1));
System.out.println(user.getUserName()); //结果为“aaa”
user.setUserName="bbb";
session.merge(user); //查看数据库,值已经变为bbb

user=session.get(User.class,new Integer(1));
System.out.println(user.getUserName()); //结果为随机的显示为“aaa”或“bbb”

不知道这是怎么回事?我找了好多文章也没有看到这种问题的解决方法。没办法只好把hibernate2换成了3。问题没有了。
但是究竟是怎么回事?应该不是hibernate的BUG吧?该怎么解决?

2. get一个对象,然后改变该对象一个属性的值,更新这个对象。在更新这个对象前,想记录该属性以前的值,但是发现再次get这个对象后,该属性已经变成新设置的值。
例如:

public void updateUser(User user){
User oldUser=session.get(User.class,user.getUserid());
System.out.println(oldUser.getUserName()); //这时已成变成了"bbb"
logForUpdateUser(user,oldUser);
}


User user=session.get(User.class,new Integer(1));
System.out.println(user.getUserName()); //结果为“aaa”
user.setUserName("bbb");
//更新对象
updateUser(user);

原因是因为第二次取出来的对象是从缓存中取出的,但缓存中的对象的属性性已经被改变了。
这样的话,记录的日志就是不准确的。
用session.flush(),不起作用,session.clear()可以起作用,但是清了缓存,新的对象也更新不了,而且会对其它的的程序有影响,不能用。

这个问题该怎么解决?


请DX们指点一二,不胜感激!!!
...全文
293 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
cncba 2006-09-13
  • 打赏
  • 举报
回复
cncba 2006-09-12
  • 打赏
  • 举报
回复
没人帮忙啊?
cncba 2006-09-11
  • 打赏
  • 举报
回复
事务当然有啊,上面写的是个大概的过程。
没有事务怎么能进到数据库里呢?
yexiaoying 2006-09-10
  • 打赏
  • 举报
回复
楼上的正解啊
huafong 2006-09-09
  • 打赏
  • 举报
回复
事务呢? 晕
这是一个实际使用中的项目,可访问 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,512

社区成员

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

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