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们指点一二,不胜感激!!!