xih  
          日歷

          導航

          常用鏈接

          留言簿(2)

          隨筆檔案

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

           
          項目要求能獲得CONNECTION便于對數據庫的操作,并要求能與spring中的事務處于同一事務中。實現:
          1.定義SanHibernateTransactionManager類,繼承spring中的
          HibernateTransactionManager,便于獲得HibernateTransactionObject。把這個類注入到spring容器中。
          < bean? id ="transactionManager"
          ????????class
          ="com.san.tools.hibernate.SanHibernateTransactionManager" >
          ????????
          < property? name ="sessionFactory" >
          ????????????
          < ref? bean ="sessionFactory" />
          ????????
          </ property >
          ????
          </ bean >

          ?
          public?class?SanHibernateTransactionManager?extends?HibernateTransactionManager{

          ????
          public?Object?getTransactionObj(){
          ????????
          return?super.doGetTransaction();
          ????}

          ????
          ????????
          ????
          public?boolean?existsTransaction(Object?transaction){
          ????????
          return?super.isExistingTransaction(transaction);
          ????}

          ????
          ????
          public?Session?getSession(){
          ????????
          return?SessionFactoryUtils.getSession(this.getSessionFactory(),?true);
          ????}

          ????
          ????
          public?Session?getCurrentSession(){
          ????????HibernateTransactionObject?obj?
          =?(HibernateTransactionObject)this.getTransactionObj();
          ????????
          return?obj.getSessionHolder().getSession();
          ????}

          }

          2.開始事務。
          public ? void ?beginTransaction()? throws ?SQLException {
          ????????
          // TransactionDefinition.PROPAGATION_REQUIRED:支持當前的事務,如果不存在就創建一個新的。

          ????????DefaultTransactionDefinition?transactionDef? = ? new ?DefaultTransactionDefinition(TransactionDefinition.PROPAGATION_REQUIRED);
          ????????
          // 創建一個TransactionStatus

          ????????TransactionStatus?transactionStatus? = ?transactionManager.getTransaction(transactionDef);
          ????????
          //
          取得綁定到當前線程上的session。從HibernateTransactionObject中獲得,這里修改了spring中HibernateTransactionManager.java文件,
          ????????
          // 將private?HibernateTransactionObject改為protected?HibernateTransactionObject

          ????????Session?session? = ?transactionManager.getCurrentSession();
          ??????
          if (session? != ? this .session)
          {
          ????????????System.err.println(
          " session不是同一對象 "
          );
          ????????}

          ????????
          // 將transactionStatus保存到集合中
          ???????? this .transactionStatuss.add(transactionStatus);
          ????????
          this .beginTransaction? = ? true
          ;
          ????}
          3.提交事務
          public ? void ?commit()? throws ?HibernateException,SQLException {
          ????????
          // 循環TransactionStatus集合,直至第一個transactionStatus被提交時,才真正提交

          ???????? for ( int ?i? = ?transactionStatuss.size()? - ? 1 ;i? >= ? 0 ;i -- ) {
          ????????????DefaultTransactionStatus?transactionStatus?
          =
          ?(DefaultTransactionStatus)transactionStatuss.get(i);
          ????????????transactionManager.commit(transactionStatus);
          ????????}

          ????????transactionStatuss.clear();
          ????}
          4.回滾事務
          public?void?rollBack(){
          ????????
          for(int?i?=?transactionStatuss.size()?-?1;i?>=?0;i--){
          ????????????DefaultTransactionStatus?transactionStatus?
          =?(DefaultTransactionStatus)transactionStatuss.get(i);
          ????????????transactionManager.rollback(transactionStatus);
          ????????}

          ????????transactionStatuss.clear();
          ????}
          ???????貼出這段代碼一是為了共享一點所得,二是希望能指出中間有什么不正確的地方(心里不是很有底)
          posted on 2009-03-30 15:32 費思量 閱讀(539) 評論(1)  編輯  收藏
          評論:

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
           
          Copyright © 費思量 Powered by: 博客園 模板提供:滬江博客
          主站蜘蛛池模板: 临湘市| 湖口县| 兴安盟| 略阳县| 三河市| 揭西县| 共和县| 德江县| 盐边县| 东方市| 衡南县| 海伦市| 香港 | 寻乌县| 柳林县| 威宁| 墨竹工卡县| 商洛市| 含山县| 伊金霍洛旗| 古田县| 波密县| 江北区| 宁安市| 晴隆县| 肇东市| 辉县市| 峨边| 博野县| 乐业县| 延川县| 玉环县| 武义县| 屯昌县| 成都市| 巫山县| 昌邑市| 安徽省| 昌平区| 景泰县| 米易县|