hibernate修改数据库后的不能在本地更新的问题!!

在hibernate中用以下语句修改纪录:


BranchForm form=(BranchForm)actionForm;
net.sf.hibernate.Session session=form.getSession();
Branch branch=(Branch)session.load(Branch.class,form.getBranchNo());
BeanUtils.copyProperties(branch, form);
session.update(branch);


提交数据库后,在数据库中查,纪录确实被修改了,但是用以下代码查看,发现还是原来的数据!请问大家怎样解决?

java.util.List list=session.find("from Branch branch");
java.util.Iterator iter=list.iterator();
Branch branch=null;
while(iter.hasNext()){
branch=(Branch)iter.next();
System.out.println(branch.getBranchNo()+ new String(branch.getBranchName().getBytes(
"8859_1"),"gb2312"));
}

你不会是没有提交吧?

> 你不会是没有提交吧?

我的提交是在外边写的,肯定提交了,因为数据库中已经更新了!只是hibernate提取的仍然是原来的数据!

在取出数据后加上一句refresh()后显示正确的数据了。但是这样是否正常?


java.util.List list=session.find("from Branch branch");
java.util.Iterator iter=list.iterator();
Branch branch=null;
while(iter.hasNext()){
branch=(Branch)iter.next();
session.refresh(branch);
System.out.println(branch.getBranchNo()+ new String(branch.getBranchName().getBytes(
"8859_1"),"gb2312"));
}

我用hibernate作更新没有这样的问题啊。
我猜测是不是你的update和find在同一个session中的原因,在update语句后加上session.flush(); 试试。我只是猜测而以,说得不对请别见笑。建议你打开sql语句看看是不是正常。

不知道你是否看参考手册了,那里它无数遍的说了update,refresh的事情。

持久对象并不是当你提交后就消失的,它还是存在的。即使你关闭程序,消失的也只是持久类。

如果你的两段代码用的都是同一个session,而你又没有用transaction,就有可能出现你说的那种情况,这是你自己程序写的不对。另外如果你使用了JCS,也有可能读出旧数据。

BTW,你那个session.update(branch)是多余的。