环境:我是用hibernate框架 oracle10g数据库 MyEclipse6.0起因:对一个对象进行了update操作。DAO:
public boolean update( Long id, String message ){
try {
Reaction reaction = findById(id);
reaction.setReactioncontent(message);
getSession().update(reaction);
return true;
} catch (RuntimeException re) {
System.out.println("sdaf");
return false;
}
}servlet:
ReactionDAO dao = new ReactionDAO();
dao.update(id, message);
dao.getSession().beginTransaction().commit();
dao.getSession().flush();
dao.getSession().close();
问题:
该对象数据库中已经保存,PL/SQL可以查到。 但再用dao进行查询时,有时候显示更新了,有时显示没有更新。 重启tomcat,就全部更新了,不再有这个问题。小弟不明白,是不是update以后,数据到底保存到哪里去了?怎么数据库可以查得到,但是DAO不是每次都能查到?
我这个bug这么解决?
public boolean update( Long id, String message ){
try {
Reaction reaction = findById(id);
reaction.setReactioncontent(message);
getSession().update(reaction);
return true;
} catch (RuntimeException re) {
System.out.println("sdaf");
return false;
}
}servlet:
ReactionDAO dao = new ReactionDAO();
dao.update(id, message);
dao.getSession().beginTransaction().commit();
dao.getSession().flush();
dao.getSession().close();
问题:
该对象数据库中已经保存,PL/SQL可以查到。 但再用dao进行查询时,有时候显示更新了,有时显示没有更新。 重启tomcat,就全部更新了,不再有这个问题。小弟不明白,是不是update以后,数据到底保存到哪里去了?怎么数据库可以查得到,但是DAO不是每次都能查到?
我这个bug这么解决?
try {
Session sesion = getSession();
Transaction tx = sesion.beginTransaction();
Reaction reaction = findById(id);
reaction.setReactioncontent(message);
tx.commit();
return true;
} catch (RuntimeException re) {
System.out.println("sdaf");
return false;
}
}
Reaction reaction = Load(id);
find的形式没有使用延迟加载
dao.getSession().beginTransaction().commit();//此处开启事务并提交,中间没有任何处理逻辑,
dao.getSession().flush();//此处事务已经提交,而且里面没有持久化对象flush没有任何意义
dao.getSession().close();
session.flush()可以强制进行从内存到数据库的同步
session.find()实际上是无法利用缓存的,它对缓存只写不读。3版本以后已经被get()取代了
update需要开始事务