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: 博客園 模板提供:滬江博客
          主站蜘蛛池模板: 汾阳市| 榆社县| 四平市| 闽清县| 清徐县| 青河县| 清流县| 祁阳县| 九龙县| 于都县| 大方县| 晴隆县| 武汉市| 肇州县| 苏尼特左旗| 长寿区| 兰西县| 台北市| 民县| 湾仔区| 商丘市| 若羌县| 松原市| 肇庆市| 合作市| 伊吾县| 白城市| 锡林浩特市| 迭部县| 买车| 南和县| 伊通| 盈江县| 涿鹿县| 峨山| 云南省| 英德市| 朝阳县| 岚皋县| 禹城市| 瑞安市|