posts - 431,  comments - 344,  trackbacks - 0
          AbstractTransactionalDataSourceSpringContextTests缺乏對hibernate session的處理,需要對其進行擴展,擴展基本思路是在事務開始后,結束前把測試方法包裝在

          HibernateTemaplate.executeWithSession(...){
          public Object doInHibernate(Session session) {
          runTest();
          session.flush();//synchornize database, errors will be reported.
          session.clear();}...}
          而AbstractTransactionalDataSourceSpringContextTests只要你不調用super.setDefaultRollback(false);這個基類默認就會回滾! 于是由此產生hibernate偷懶,無法發現數據庫操作,然后我們建議你在測試中顯示調用session.flush
          或者參雜一些查詢調用(其實也是為了觸發session.flush)。

          不過這里面也有些陷阱:如果你的測試還是會把數據寫入了數據庫的話,可能是由于你加載的spring配置文件里有多個事務管理器或session工廠,從而導致AbstractTransactionalDataSourceSpringContextTests沒有獲得正確的TransactionManager或SessionFactory,所以就沒能回滾不過這種錯誤也不太容易犯,因為AbstractTransactionalDataSourceSpringContextTests默認按類型組裝,如果她發現有多個TransactionManager類型的bean是要報錯的,此時你需要調用setAutowireMode(this.AUTOWIRE_BY_NAME);使其按名稱組裝。

          另外值得注意的是,使用MYSQL時候表的類型選擇。例如

          CREATE TABLE `myisam` (
            `id` 
          int(11NOT NULL auto_increment,
            `name` 
          varchar(100default NULL,
            `content` 
          text,
            
          PRIMARY KEY  (`id`)
          ) ENGINE
          =MyISAM DEFAULT CHARSET=gbk;
          這時候應該把類型改為InnoDB。

          MySQL存儲引擎包括處理事務安全表的引擎和處理非事務安全表的引擎:· MyISAM管理非事務表。它提供高速存儲和檢索,以及全文搜索能力。MyISAM在所有MySQL配置里被支持,它是默認的存儲引擎,除非你配置 MySQL默認使用另外一個引擎。 ·MEMORY存儲引擎提供“內存中”表。MERGE存儲引擎允許集合將被處理同樣的MyISAM表作為一個單獨的表。就像MyISAM一樣, MEMORY和MERGE存儲引擎處理非事務表,這兩個引擎也都被默認包含在MySQL中。 釋:MEMORY存儲引擎正式地被確定為HEAP引擎。· InnoDB和BDB存儲引擎提供事務安全表。BDB被包含在為支持它的操作系統發布的MySQL-Max二進制分發版里。InnoDB也默認被包括在所 有MySQL 5.1二進制分發版里,你可以按照喜好通過配置MySQL來允許或禁止任一引擎。·EXAMPLE存儲引擎是一個“存根”引擎,它不做什么。你可以用這個 引擎創建表,但沒有數據被存儲于其中或從其中檢索。

          posted on 2007-05-15 10:06 周銳 閱讀(2293) 評論(0)  編輯  收藏 所屬分類: HibernateSpring
          主站蜘蛛池模板: 吉木乃县| 榆树市| 镇赉县| 远安县| 阿鲁科尔沁旗| 铜川市| 喀什市| 小金县| 陆丰市| 航空| 青冈县| 涟水县| 宣汉县| 翼城县| 托克托县| 石屏县| 九寨沟县| 柳州市| 东乌珠穆沁旗| 乐东| 霍林郭勒市| 武强县| 平定县| 大方县| 柘城县| 利辛县| 林西县| 九龙县| 虎林市| 镇宁| 江陵县| 平泉县| 宝兴县| 和平区| 泰和县| 建水县| 中宁县| 马鞍山市| 贺州市| 噶尔县| 盈江县|