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

举个部门、员工、角色的问题。
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>
但以上显示老是会出现错误。比如我把某三个本来是“员工”的角色改成“主管”,然后每刷新一次页面,这三个人的角色都会变,时而是“员工”,时而是“主管”。但数据库里这三个人的角色都已经是“主管”了。要过一段时间才会正确显示数据库中的数据。
这到底是什么问题。麻烦大家解答一下。
谢谢!

缓存,保存时使用flush

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

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

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

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