Hibernate的session问题
我们的Dao都是继承自自己写的一个Dao基类,基类文件是这样写的:
public class HibernateDao {
protected static InitHibernate hb ;
protected Session sess = null;
protected Transaction transaction = null;
public HibernateDao() {
this.openSession();
}
public HibernateDao(Session session) {
sess = session;
}
public void openSession(){
try{
hb = InitHibernate.instance();
sess = hb.getSession();
}catch (Exception e){
e.printStackTrace();
}
}
public void closeSession(){
if (sess != null) {
try {
sess.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
public void beginTransaction(){
if(null==sess){
openSession();
}
try {
transaction = sess.beginTransaction();
} catch (Exception ex) {
ex.printStackTrace();
}
}
public void endTransaction(){
if(!commit()){
rollback();
}
}
/**
* 确定是否对数据进行了提交.
* @return true 已提交,false 未提交.
*/
public boolean commit(){
if (null!=transaction) {
try {
transaction.commit();
return true;
} catch (Exception ex) {
ex.printStackTrace();
}
}
return false;
}
public void rollback(){
if (null != transaction) {
try {
transaction.rollback();
} catch (HibernateException ex) {
ex.printStackTrace();
}
}
}
public void delete(Object object) {
try {
sess.delete(object);
sess.flush();
} catch (Exception ex) {
ex.printStackTrace();
}
}
//save和update同delete方法,再此省略
}
问题:更新记录页面,有一个返回按钮,是返回到上一层页面,上层页面就是显示所有数据的页面,如果进入更新记录页面之后,没更新,点击返回按钮,会发现数据有窜了的现象,String的一个字段的值有的时候是没有,有的时候是错误数据,我就想问题出现的可能,猜想是在查询的时候没有关闭session,于是就返回找到所有相关的地方,关闭session,例如:
DemoDao demoDao = new DemoDao();
demoDao.save(demo);
demoDao.closeSession();//更新、添加和删除都有关闭的语句
DemoDao demoDao = new DemoDao();
demoDao.load(id);
demoDao.closeSession();//这里就没写,本以为查询语句不需要关闭session,实际上,如果不关闭session,就会导致session没有被释放,而最终数据错乱,拿了缓存数据,这里要记录下