Hibernate 语句执行顺序控制

 

public class XXDAOHibernateImpl extends HibernateDaoSupport implements IXXDAO<Discount>{

    @Override
    public void allOper(Disc disc) {
        this.deleteXXInfos(); //...A
        this.getSessionFactory().getCurrentSession().flush();
        this.update(disc); //...B
        this.getSessionFactory().getCurrentSession().flush();
        this.deleteDist(); //...C
    }
    
    //hibernate在同一个事务中的语句执行顺序不一定是按照我书写的顺序去执行
    //而是先缓存然后再一次性执行,而且顺序可能和我们程序的书写顺序来发送语句
    //但是有时候由于业务逻辑的要求,必须按照书写的顺序来
    //因此在需要调用flush()来保证前面放入缓存的语句马上执行。
    //getCurrentSession():会获取当前线程中的session,如果没有的话则创建,并且和当前线程绑定
    //并且getCurrentSession()不用自己去关闭
  //HibernateDaoSupport中的getSession()如果也会先获取和当前线程绑定的session对象,   //所以实际获取的是同一个对象: //this.getSessionFactory().getCurrentSession() == this.getSession().......//其他方法略.....}

 

posted on 2012-12-26 11:22  cfd406635982  阅读(1367)  评论(0编辑  收藏  举报