程序里需要先删除数据,然后再添加新的数据。请问下面这样的写法能确保异常时回滚吗?
另外,在保存新对象的时候,其主健对应的对象属性我并没有设定,因为主健字段的值是自动增加的。这样处理有没有什么问题? Session session = sessionFactory.getCurrentSession();
try{
session.beginTransaction().begin();
// before saving the new information, remove the old information
String delSql = "delete from XXXX where XXX='"+XX+"' ";
                                    // insert new data
for(Integer id : ids ){
XXXXX o = new XXXXX();
o.setXXId(XX);
o.setAAId(XX);
session.merge(o);
}
session.beginTransaction().commit();
getSession().clear();
}catch(Exception e){
getSession().beginTransaction().rollback();
getSession().clear();
}

解决方案 »

  1.   

    首先对你的写法有点不赞同:
    常规是这么写:Transaction tr=null;
    Session session = sessionFactory.getCurrentSession();
                try{
                    tr=session.beginTransaction();
                     //delete
                       //save
                    tr.commit();
                }catch(Exception e){
                    tr.rollback();
                    System.out.print(e);
                }
                finally{
                   session.clear();
                    }
    }