chen4765654

          Spring+Hibernate(JPA)防止臟數(shù)據(jù)自動提交

          Hibernate的臟檢查(dirty checking)。每次裝載一個對象到內存時,session始終跟蹤它的修改。于是每次對數(shù)據(jù)的查詢,session都將跌代所有的session中的對象并檢查臟數(shù)據(jù),將臟數(shù)據(jù)flush到數(shù)據(jù)庫。
          方法1:
          將事務設置為只讀,然后手工flush。
          @Transactional(rollbackFor = RuntimeException.class,readOnly=true)
          public void save(TestEmployee entity) {
          entitymanager.persist(entity);
          entitymanager.flush();
          }
          方法2:
          在一個session中讀取、查詢大量數(shù)據(jù)對象情況下的制勝武器- FlushMode.NEVER。當然要記住,在此過程中你不可以修改這些數(shù)據(jù),不然就真的把數(shù)據(jù)“搞臟”了。
          使用武器秘訣如下:
          FlushMode previous = session.getFlushMode();
          session.flush(); // who know's what been done till now
          session.setFlushMode(FlushMode.NEVER);
          // Do some querying
          // Do some more querying
          // Really load up that session
          // Execute a few more queries
          // Write back to some tables
          session.flush();
          session.setFlushMode(previous);

          posted on 2014-09-07 11:13 紫色心情 閱讀(3381) 評論(0)  編輯  收藏 所屬分類: JAVA

          主站蜘蛛池模板: 香格里拉县| 明光市| 丘北县| 香河县| 安龙县| 罗甸县| 陇南市| 应城市| 岳池县| 青龙| 斗六市| 长阳| 美姑县| 会宁县| 司法| 武邑县| 瓦房店市| 石楼县| 西贡区| 府谷县| 中阳县| 石河子市| 尼玛县| 凤阳县| 长宁县| 盘山县| 永州市| 高淳县| 东源县| 海原县| 和平县| 石阡县| 库车县| 大田县| 宁津县| 淮滨县| 大竹县| 琼海市| 清远市| 临高县| 霞浦县|