1. 程式人生 > >Hibernate事務配置的幾種方式

Hibernate事務配置的幾種方式

為了保持資料的一致性和完整性,在程式設計中通常會引用到事務的概念。這裡就不對事務做一一講解,大家可以看我前面的一篇講事務的部落格java JDBC事務和JTA事務詳解。事務一般有兩種:程式設計式事務和宣告式事務;程式設計式事務就是將事務處理放在程式中,而宣告式事務則是通過配置檔案或者註解進行操作。

在Spring中我們通常使用的是宣告式事務通過和Hibernate的整合去完成hibernate事務配置。

其實配置Hibernate事務的核心就一種:

    (1)、配置SessionFactory;

    (2)、配置事務容器;

    (3)、配置事務規則;

    (4)、配置事務入口;

下面我們看看通常Hibernate事務配置使用的幾種方式:

第一種:代理;

<!-- 配置事務容器 -->
<beanid="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    <propertyname="sessionFactory"ref="sessionFactory"/>
</bean>
<!-- 定義事務規則 -->
<beanid="transactionProxy"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"
abstract="true"> <propertyname="transactionManager"ref="transactionManager"/> <propertyname="transactionAttributes"> <props> <!-- ,回滾為-,不回滾為+ --> <propkey="add*">PROPAGATION_REQUIRED,-Exception</prop> <propkey
="modify*">PROPAGATION_REQUIRED,+MyException</prop> <propkey="del*">PROPAGATION_REQUIRED</prop> <propkey="*">READONLY</prop> </props> </property> </bean> <!-- 定義事務入口 --> <beanid="userDaoProxy"parent="transactionProxy"> <propertyname="target"ref="userDao"></property> </bean>

第二種:攔截器

<!-- 配置事務容器 -->
<beanid="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    <propertyname="sessionFactory"ref="sessionFactory"/>
</bean>
<!-- 定義事務規則 -->
<beanid="transactionInterceptor"
class="org.springframework.transaction.interceptor.TransactionInterceptor">
    <propertyname="transactionManager"ref="transactionManager"/>
    <propertyname="transactionAttributes">
        <props>
            <!-- 回滾為-,不回滾為+ -->
            <propkey="add*">PROPAGATION_REQUIRED,-Exception</prop>
            <propkey="modify*">PROPAGATION_REQUIRED,+MyException</prop>
            <propkey="del*">PROPAGATION_REQUIRED</prop>
            <propkey="*">READONLY</prop>
        </props>
    </property>
</bean>
<!-- 定義事務入口 -->
<beanid="proxyFactory"
class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
    <propertyname="interceptorNames">
        <list>
            <value>transactionInterceptor</value>
        </list>
    </property>
    <propertyname="beanNames">
        <list>
            <value>*Dao</value>
        </list>
    </property>
<!--使用介面時-->
    <property name="proxyTargetClass">  
        <value>true</value>  
    </property>
</bean>

第三種:利用註解

<!-- 開戶事務註解功能 -->
<tx:annotation-driventransaction-manager="transactionManager"/>  

首先在配置檔案中寫入該語句,開啟註解功能,然後利用@Transactional對類或者方法進行標記,如果標記在類上,每次此類中的所有方法都進行事務回滾處理,在類中定義Transactional的時候,它有propagation、rollbackFor、noRollbackFor等屬性,此屬性是用來定義事務規則,而定義到哪裡,哪裡就是事務的入口。

第四種:配置SessionFactory ----配置會話工廠

<!-- 配置資料來源 -->
<beanid="dataSource"class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
    <propertyname="driverClassName"value="com.mysql.jdbc.Driver"></property>
    <propertyname="url"value="jdbc:mysql://localhost:3306/hibernate_cache"></property>
    <propertyname="username"value="root"></property>
    <propertyname="password"value="admin"></property>
</bean>

<!-- 2.2、配置SessionFactory -->
<beanid="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    <propertyname="dataSource"ref="dataSource"></property>
    <propertyname="hibernateProperties">
        <props>
            <propkey="hibernate.hbm2ddl.auto">update</prop>
        </props>
    </property>
    <propertyname="mappingLocations">
        <list>
            <value>classpath:實體對應xml的路徑</value>
        </list>
    </property>
</bean>
    <!--到這裡Hibernate就成功的將SessionFactory交給了Spring來管理。
    然後利用tx標籤配置事務。-->

<!-- 配置事務容器 -->
<beanid="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    <propertyname="sessionFactory"ref="sessionFactory"/>
</bean>

<!-- 定義事務規則 -->
<tx:adviceid="txAdvice"transaction-manager="transactionManager">
    <tx:attributes>
        <tx:methodname="add*"propagation="REQUIRED"/>
        <tx:methodname="modify*"propagation="REQUIRED"/>
        <tx:methodname="del*"propagation="REQUIRED"/>
        <tx:methodname="*"propagation="REQUIRED"read-only="true"/>
    </tx:attributes>
</tx:advice>

<!-- 定義事務入口 -->
<aop:config>
    <aop:pointcutid="allDaoMethod"expression="execution(* com.jianxin.dao.*.*(..))"  />
    <aop:advisoradvice-ref="txAdvice"pointcut-ref="allDaoMethod"/>
</aop:config> 

相關推薦

Hibernate事務配置方式

為了保證資料的一致性,在程式設計的時候往往需要引入事務這個概念。事務有4個特性:原子性、一致性、隔離性、永續性。 事務的種類有兩種:程式設計式事務和宣告式事務。程式設計式事務就是將事務處理放在程式中,而宣告式事務則是通過配置檔案或者註解進行操作。

(轉)spring事務管理方式

pac jpg gets point aos load man classpath XML 轉自:http://blog.csdn.net/jeamking/article/details/43982435 前段時間對Spring的事務配置做了比較深入的研究,在此之間對

Hibernate事務配置方式

為了保持資料的一致性和完整性,在程式設計中通常會引用到事務的概念。這裡就不對事務做一一講解,大家可以看我前面的一篇講事務的部落格java JDBC事務和JTA事務詳解。事務一般有兩種:程式設計式事務和宣告式事務;程式設計式事務就是將事務處理放在程式中,而宣告式事務則是通過配置

Spring管理 hibernate 事務配置的五方式

Spring配置檔案中關於事務配置總是由三個組成部分,DataSource、TransactionManager和代理機制這三部分,無論是那種配置方法,一般變化的只是代理機制這塊!   首先我建立了兩個類,一個介面一個實現: Java程式碼&

Spring管理 hibernate 事務配置的五方式

Spring配置檔案中關於事務配置總是由三個組成部分,DataSource、TransactionManager和代理機制這三部分,無論是那種配置方法,一般變化的只是代理機制這塊! 首先我建立了兩個類,一個介面一個實現: Java程式碼  

事務有哪些特性?spring的事務管理有方式實現,如何實現?spring 中常用的兩事務配置方式以及事務的傳播性、隔離級別

事務有哪些特性?             1.原子性:一個事務中所有對資料庫的操作是一個不可分割的操作序列,要麼全做要麼全不做            2.一致性:資料不會因為事務的執行而遭到破壞            3.隔離性:一個事物的執行,不受其他事務的干擾,即併發執

Windows上安裝配置SSH教程(7)——方式對比

由於 客戶端 方案 body open ins 下使用 上傳下載 直接 服務端:Windows XP 客戶端:Windows 10 由於Cygwin也可以安裝OpenSSH,所以客戶端其實可以直接使用Cygwin安裝OpenSSH,那麽在Windows下使用SCP(安全拷貝

Hibernate的條件查詢的方式+查詢所有的記錄

數據庫 rop query 寫法 OS 由於 AC 對象 tst 1、 第一種,用?占位符,如: //登錄(用?占位符) public List<UserPO> LoginUser(UserPO up)throws Exception{ Session

springboot 讀取 yml 配置方式

前言:在springboot 專案中一般預設的配置檔案是application.properties,但是實際專案中我們一般會使用application.yml 檔案,下面就介紹一下在springboot 中讀取 yml 配置的幾種方式. yml 檔案規則 yml檔案的好處,天然的樹狀結構,一目瞭然

虛擬機器配置網路(ip)的方式

配置IP有兩種方式:自動獲取ip和設定靜態IP。 A、自動獲取ip $ sudo vi /etc/sysconfig/network-scripts/ifcfg-eth0 ONBOOT=yes---------設定開機自動啟用網絡卡。 1、橋接模式: 相當於連線到物理機

sql 迴圈語句方式(變數迴圈,遊標迴圈,事務

--第一     declare @orderNum varchar(255) create table #ttableName(id int identity(1,1),Orders varchar(255)) declare @n

sql 循環語句方式(變量循環,遊標循環,事務

llb reat 語句 tab create cti table end 數據 --第一 declare @orderNum varchar(255) create table #ttableName(id int identity(1,1),Ord

Java 讀取 .properties 配置檔案的方式

Java 開發中,需要將一些易變的配置引數放置再 XML 配置檔案或者 properties 配置檔案中。然而 XML 配置檔案需要通過 DOM 或 SAX 方式解析,而讀取 properties 配置檔案就比較容易。 介紹幾種讀取方式: 1、基於ClassLoder

hibernate建立SessionFactory的方式,及原因分析?

全網搜尋不到原因分析,如下是我自己總結的,參考的是原始碼介紹! 1. hibernate3.X SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory

Spring中配置資料來源的方式

無論使用什麼形式的Spring DAO支援類,都需要配置資料來源的引用。Spring提供了多個選項,用於在Spring程式裡配置資料庫,其中包括: 1,由JDBC驅動程式定義的資料來源。 2,由JNDI查詢的資料來源。 3,連線池的資料來源。 在Spring裡,我們可以像使用其他

Java 讀取 properties 配置檔案的方式及注意點

1、引言 java開發中,經常需要讀取配置檔案,有時即使我們方法是對的,但是就是讀取不到需要的內容,會報下面的錯: java.io.FileNotFoundException: sr/configure/config.properties (No such file or dir

SpringBoot讀取配置資料的方式

#####SpringBoot讀取配置資料的幾種方式 方式一: 我們通過@Value("${spring.datasource.url}")這樣的方式讀取PropertyPlaceholderConfigurer.properties配置資料集合,本種方式是可以適應各種應用場景,推薦

Spring事務管理之方式實現事務

1、事務認識 大家所瞭解的事務Transaction,它是一些列嚴密操作動作,要麼都操作完成,要麼都回滾撤銷。Spring事務管理基於底層資料庫本身的事務處理機制。資料庫事務的基礎,是掌握Spring事務管理的基礎。這篇總結下Spring事務。 事務具備ACID四種特性,

Spring監聽配置方式

方法一:在applicationContext.xml配置檔案中配置 <task:scheduled-tasks>        <!-- 每天凌晨兩點執行  -->        <task:scheduled ref="zginfoServ

udev配置RAC ASM的方式

一、60-raw.rules [[email protected] ~]# vi /etc/udev/rules.d/60-raw.rules ACTION=="add",KERNEL=="sdb",RUN+="/bin/raw /dev/raw/raw1 %N"