事務(wù)處理:
          Hibernate本身并不具備事務(wù)管理能力。在事務(wù)管理層,Hibernate將其委托給底層的JDBC或者JTA,以實現(xiàn)事務(wù)的管理與調(diào)度。

          基于JDBC的事務(wù):
          無疑是最簡單的實現(xiàn)方式,
          session = sessionFactory.openSession();
          Transaction tx = session.beginTransaction();
          tx.commit();

          基于JTA的事務(wù)管理:
          hibernate默認采用JDBC Transacion。可以通過配置文件指定采用JTA作為事務(wù)管理實現(xiàn)。
          <hibernate-configuration>
          ??? <session-factory>
          ??????? ......
          ??????? <property name="hibernate.transaction.factory_class">
          ??org.hibernate.transaction.JTATransactionFactory
          ??????? </property>
          ??? </session-factory>
          </hibernate-configuration>

          鎖(locking)
          支持兩種鎖:悲觀鎖和樂觀鎖

          悲觀鎖(Pessimistic locking):
          數(shù)據(jù)庫的實現(xiàn)
          select * from account where name='yyy' for update
          通過for update子句,這條語句鎖定所有符合條件的記錄,在本次事務(wù)提交之前,外界無法修改這些記錄。

          hibernate的實現(xiàn),也是基于數(shù)據(jù)庫的鎖機制實現(xiàn):
          加鎖一般通過以下方法實現(xiàn):
          Criteria.setLockMode
          Query.setLockMode
          Session.lock

          hibernate的加鎖模式:
          LockMode.NONE:無鎖機制
          LockMode.WRITE:hibernate在Insert和update時,會自動獲取
          LockMode.READ:hibernate在讀取記錄的時候,會自動獲取
          以上3種,由hibernate內(nèi)部使用。

          LockMode.UPGRADE:利用數(shù)據(jù)庫的for update子句加鎖
          LockMode.UPGRADE_NOWAIT:oracle特定實現(xiàn),利用oracle的for update nowait子句實現(xiàn)加鎖。

          樂觀鎖(Optimistic locking):
          hibernate在其數(shù)據(jù)訪問引擎中內(nèi)置了樂觀鎖實現(xiàn)。可以通過class描述符的optimistic-lock屬性結(jié)合version描述符指定。

          <hibernate-mapping>
          ??? <class
          ??????? name="org.hibernate.sample.TUser"
          ??????? table="t_user"
          ??????? dynamic-update="true"
          ??????? dynamic-insert="true"
          ??????? optimistic-lock="version"
          ??? >
          ???? <id>......
          ???? </id>
          ????? <version
          ???????? column="version"
          ???????? name="version"
          ???????? type="java.lang.Integer"
          ????? />
          ??? </class>
          </hibernate-mapping>
          注意,version節(jié)點要在ID節(jié)點之后。
          這里,聲明了一個version屬性,用于存放用戶的版本信息,保存在T_User表的version字段中。

          posted on 2006-07-16 10:18 knowhow 閱讀(1338) 評論(0)  編輯  收藏 所屬分類: ORM:Hibernate及其他
          主站蜘蛛池模板: 新绛县| 嵊州市| 浪卡子县| 拉孜县| 汾阳市| 肥西县| 茶陵县| 长海县| 新宁县| 岳池县| 苍梧县| 利川市| 高密市| 玉环县| 定兴县| 色达县| 青阳县| 晋中市| 金川县| 鄂尔多斯市| 塔城市| 彭州市| 恭城| 五莲县| 喀什市| 锦州市| 沙河市| 宣城市| 中牟县| 砚山县| 扎兰屯市| 郑州市| 邹城市| 陈巴尔虎旗| 略阳县| 巴林右旗| 龙海市| 徐州市| 白山市| 巨野县| 和龙市|