Hibernate的Transaction詳解

堅持每天寫博文,積累下開發中的點點滴滴
Transaction

  • 將應用代碼從底層的事務實現中抽離出來,底層事務可以是JDBC事務,JTA用戶事務(在兩個系統或兩個數據庫同時使用事務)甚至是一個公共對象請求代理結構,允許應用通過一組一致的API控制事務邊界。(可以存在多個事務)
  • 使用hibernate進行操作時,(增刪改)必須顯示的調用Transaction(默認autoCommit=false)
  • 當我們需要兩個表中同時使用事務的時候標準寫法是
public static void main(String[] args) {
        Session session = null;
        Transaction tran = null;
        try {
            SessionText sessionText = new SessionText();
            sessionText.setSes_name("sessionText");
            sessionText.setSes_passWord("sessionPass");
            session = HibernateUtils.getSession();
            tran = session.beginTransaction();
            session.save(sessionText);
            /*session.save(sessionText2);(第二張表)*/
            tran.commit();
        } catch (Exception e) {
            e.printStackTrace();//是否活動中
            if(tran == null && tran.isActive()) {
                tran.rollback();
            }
        }finally {
            if(session == null && session.isOpen()) {
                session.close();
            }
        }
    }

以上代碼實現同時存入兩個對象,當只有其中一個對象存入另外的出錯是進行回滾。這種寫法是當同時操作兩個表的時候使用,只操作一個表的時候直接使用session.beginTransaction();就可以。

總結

  • org.hibernate.Transaction 可以對同一個數據庫裏面的N個表處理事務(要不都成功,要麼都失敗)
  • javax.transaction.Transaction 對不同數據庫裏的N個表處理事務(要麼都成功,要麼都失敗),一般被稱爲JTA事務。實現原理:有一個內部事務List;List.add(dml是否成功的標誌:boolean),最後判斷list裏面的boolean是否全部爲true,都成功。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章