为什么hibernate得不到实时更新的数据

06-07-20 myctx
举个部门、员工、角色的问题。

EmployeeDAO empdao = new EmployeeDAO();

Employee emp = empdao.getEmployeeById(Long.parseLong(request.getParameter("empid")),true);

long roleid = Long.parseLong(o.toString());

Role role = new RoleDAO().getRoleById(roleid,false);

emp.setRole(role);

empdao.makePersistent(emp);

在用以上代码更新某个员工的角色后,跳到一个显示页面,代码如下,显示一个部门的员工角色,

<logic:iterate id="emp" name="dept" property="employees">

${emp.name}--${emp.role.description}

</logic:iterate>

但以上显示老是会出现错误。比如我把某三个本来是“员工”的角色改成“主管”,然后每刷新一次页面,这三个人的角色都会变,时而是“员工”,时而是“主管”。但数据库里这三个人的角色都已经是“主管”了。要过一段时间才会正确显示数据库中的数据。

这到底是什么问题。麻烦大家解答一下。

谢谢!

banq
2006-07-24 18:02
缓存,保存时使用flush

VerRan
2006-08-01 22:56
这是因为需要对session的缓存进行清理,当你清理后对数据的操作才会被更新!清理缓存的时间点有以下几种情况:

当应用程序调用net.sf.hibernate.Transaction的commit()方法的时候,commit()方法先清理缓存,然后再向数据库提交事务。

当应用程序调用Session的find()或者iterate()时,如果缓存中持久化对象的属性发生了变化,就会先清理缓存,以保证查询结果能反映持久化对象的最新状态。

当应用程序显式调用Session的flush()方法的时候。

猜你喜欢