chen4765654

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

          Hibernate的臟檢查(dirty checking)。每次裝載一個對象到內存時,session始終跟蹤它的修改。于是每次對數據的查詢,session都將跌代所有的session中的對象并檢查臟數據,將臟數據flush到數據庫。
          方法1:
          將事務設置為只讀,然后手工flush。
          @Transactional(rollbackFor = RuntimeException.class,readOnly=true)
          public void save(TestEmployee entity) {
          entitymanager.persist(entity);
          entitymanager.flush();
          }
          方法2:
          在一個session中讀取、查詢大量數據對象情況下的制勝武器- FlushMode.NEVER。當然要記住,在此過程中你不可以修改這些數據,不然就真的把數據“搞臟”了。
          使用武器秘訣如下:
          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

          主站蜘蛛池模板: 马公市| 嘉黎县| 宜宾市| 武强县| 天峻县| 镇原县| 永定县| 平利县| 寿阳县| 将乐县| 阳谷县| 招远市| 原阳县| 民权县| 凤城市| 龙江县| 昔阳县| 乐都县| 汝城县| 韶关市| 苏州市| 丰原市| 遂溪县| 固安县| 罗甸县| 扎兰屯市| 吉水县| 东台市| 通山县| 扎鲁特旗| 故城县| 临邑县| 迁西县| 遂昌县| 永兴县| 隆子县| 乌兰察布市| 荔浦县| 临颍县| 万年县| 乐平市|