亚洲免费乱码视频,日韩 欧美 国产 动漫 一区,97在线观看免费视频播国产,中文字幕亚洲图片

      1. <legend id="ppnor"></legend>

      2. 
        
        <sup id="ppnor"><input id="ppnor"></input></sup>
        <s id="ppnor"></s>

        HibernateSession中的flush方法的作用

        字號:

        Hibernate Session中的 flush方法的作用:
            session flush方法主要做了兩件事:
            * 清理緩存
            * 執(zhí)行sql
            session在什么情況下執(zhí)行flush
            * 默認(rèn)在事務(wù)提交時
            * 顯示的調(diào)用flush
            * 在執(zhí)行查詢前,如:iterate
            /**
            * 測試uuid主鍵生成策略
            */
            public void testSave1() {
            Session session = null;
            Transaction tx = null;
            try {
            session = HibernateUtils.getSession();
            tx = session.beginTransaction();
            User1 user = new User1();
            user.setName("李四");
            user.setPassword("123");
            user.setCreateTime(new Date());
            user.setExpireTime(new Date());
            //因為user的主鍵生成策略采用的是uuid,所以調(diào)用完成save后,只是將user納入到了session的管理
            //不會發(fā)出insert語句,但是id已經(jīng)生成,session中existsInDatebase狀態(tài)為false
            session.save(user);
            //調(diào)用flush,hibernate會清理緩存,執(zhí)行sql
            //如果數(shù)據(jù)庫的隔離級別設(shè)置為為提交讀,那么我們可以看到flush過的數(shù)據(jù)
            //并且session中existsInDatebase狀態(tài)為true
            session.flush();
            //提交事務(wù)
            //默認(rèn)情況下commit操作會先執(zhí)行flush清理緩存,所以不用顯示的調(diào)用flush
            //commit后數(shù)據(jù)是無法回滾的
            tx.commit();
            }catch(Exception e) {
            e.printStackTrace();
            tx.rollback();
            }finally {
            HibernateUtils.closeSession(session);
            }
            }
            /**
            * 測試native主鍵生成策略
            */
            public void testSave2() {
            Session session = null;
            Transaction tx = null;
            try {
            session = HibernateUtils.getSession();
            tx = session.beginTransaction();
            User2 user = new User2();
            user.setName("張三1");
            user.setPassword("123");
            user.setCreateTime(new Date());
            user.setExpireTime(new Date());
            //因為user的主鍵生成策略為native,所以調(diào)用session.save后,將執(zhí)行insert語句,返回有數(shù)據(jù)庫生成的id
            //納入了session的管理,修改了session中existsInDatebase狀態(tài)為true
            //如果數(shù)據(jù)庫的隔離級別設(shè)置為為提交讀,那么我們可以看到save過的數(shù)據(jù)
            session.save(user);
            tx.commit();
            }catch(Exception e) {
            e.printStackTrace();
            tx.rollback();
            }finally {
            HibernateUtils.closeSession(session);
            }
            }
            /**
            * 測試uuid主鍵生成策略
            */
            public void testSave3() {
            Session session = null;
            Transaction tx = null;
            try {
            session = HibernateUtils.getSession();
            tx = session.beginTransaction();
            User1 user = new User1();
            user.setName("王五");
            user.setPassword("123");
            user.setCreateTime(new Date());
            user.setExpireTime(new Date());
            //因為user的主鍵生成側(cè)路采用的是uuid,所以調(diào)用完成save后,只是將user納入到了session的管理
            //不會發(fā)出insert語句,但是id已經(jīng)生成,session中existsInDatebase狀態(tài)為false
            session.save(user);
            //將user對象從session中逐出,即session的EntityEntries屬性中逐出
            session.evict(user);
            //無法成功提交,因為hibernate在清理緩存時,在session的insertions集合中取出user對象進行insert操作后
            //需要更新entityEntries屬性中的existsInDatabase為true,而我們采用evict已經(jīng)將user從session的entityEntries
            //中逐出了,所以找不到相關(guān)數(shù)據(jù),無法更新,拋出異常
            tx.commit();
            }catch(Exception e) {
            e.printStackTrace();
            tx.rollback();
            }finally {
            HibernateUtils.closeSession(session);
            }
            }
            /**
            * 測試uuid主鍵生成策略
            */
            public void testSave4() {
            Session session = null;
            Transaction tx = null;
            try {
            session = HibernateUtils.getSession();
            tx = session.beginTransaction();
            User1 user = new User1();
            user.setName("王五");
            user.setPassword("123");
            user.setCreateTime(new Date());
            user.setExpireTime(new Date());
            //因為user的主鍵生成側(cè)路采用的是uuid,所以調(diào)用完成save后,考試大提示只是將user納入到了session的管理
            //不會發(fā)出insert語句,但是id已經(jīng)生成,session中existsInDatebase狀態(tài)為false
            session.save(user);
            //flush后hibernate會清理緩存,會將user對象保存到數(shù)據(jù)庫中,將session中的insertions中的user對象
            //清除,并且設(shè)置session中existsInDatebase的狀態(tài)為true
            session.flush();
            //將user對象從session中逐出,即session的EntityEntries屬性中逐出
            session.evict(user);
            //可以成功提交,因為hibernate在清理緩存時,在session的insertions集合中無法找到user對象
            //所以就不會發(fā)出insert語句,也不會更新session中的existsInDatabase的狀態(tài)
            tx.commit();
            }catch(Exception e) {
            e.printStackTrace();
            tx.rollback();
            }finally {
            HibernateUtils.closeSession(session);
            }
            }
            /**
            * 測試native主鍵生成策略
            */
            public void testSave5() {
            Session session = null;
            Transaction tx = null;
            try {
            session = HibernateUtils.getSession();
            tx = session.beginTransaction();
            User2 user = new User2();
            user.setName("張三11");
            user.setPassword("123");
            user.setCreateTime(new Date());
            user.setExpireTime(new Date());
            //因為user的主鍵生成策略為native,所以調(diào)用session.save后,將執(zhí)行insert語句,返回有數(shù)據(jù)庫生成的id
            //納入了session的管理,修改了session中existsInDatebase狀態(tài)為true
            //如果數(shù)據(jù)庫的隔離級別設(shè)置為為提交讀,考試大提示可以看到save過的數(shù)據(jù)
            session.save(user);
            //將user對象從session中逐出,即session的EntityEntries屬性中逐出
            session.evict(user);
            //可以成功提交,因為hibernate在清理緩存時,在session的insertions集合中無法找到user對象
            //所以就不會發(fā)出insert語句,也不會更新session中的existsInDatabase的狀態(tài)
            tx.commit();
            }catch(Exception e) {
            e.printStackTrace();
            tx.rollback();
            }finally {
            HibernateUtils.closeSession(session);
            }
            }