1. 程式人生 > >spring 配置hibernate事務處理

spring 配置hibernate事務處理

學習Spring+Hibernate,非常強大的框架,為了追新,就直接從最高版本開始學習了,這要冒很大的風險,因為網上可查到的資料大多是針對舊版本的,比如Spring3,Hibernate3。

根據我的測試,記錄如下:

1.Spring4事務必須針對介面,否則報錯。(之前可以不針對介面?)如果沒有事務,則bean普通類也可以注入。

2.事務可以放在介面上,也可以放在實現上。

3.注意應用程式空間必須統一,否則事務失敗。

4.Bean最好都交給Spring來管理,如果不是,則如果出現事務控制,可能因不同的應用空間而造成事務失敗。

5.事務連線可以使用DataSourceTransactionManager,使用HibernateTransactionManager也可以。

複製程式碼
<!-- 
    <bean id="transactionManager"   
            class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource" />  
    </bean>  
     -->

    <bean id="transactionManager"   
            class="org.springframework.orm.hibernate4.HibernateTransactionManager"
> <property name="sessionFactory" ref="sessionFactory" /> </bean>
複製程式碼

 6.如果使用了JdbcTemplate和Hibernate,則應使用HibernateTransactionManager,如果使用DataSourceTransactionManager,則會提示沒有活動Session錯誤。

(這個可能是我配置的有問題?)

7.如果使用事務,則呼叫時一定要使用介面,否則就會報告錯誤。

BillOperbaseBill=(BillOper)ctx.getBean("saleBill");

BillOper為第一沒介面。

8.如果在程式中像這樣使用:

sessionFactory.getCurrentSession().save(T);

如果不開啟事務,則會報告

No Session found for current thread

錯誤。

9.Spring4+Hibernate4中不再支援HibernaterTemplate,只能使用原生的session介面來操作。

10.如果報告錯誤:hibernate:Cannot use identity column key generation with <union-subclass> mapping for ..... 

使用hibernate union-subclass 元素進行繼承對映時會丟擲此異常:Cannot use identity column key generation with <union-subclass> mapping for.............

原因是使用unnion-subclass 元素時 父類的標識屬性生成器不能使用“indentity(native)”  可以選擇"hilo”,"increment”等。

11.如果使用Spring+Hibernate,有時Hibernate的配置檔案錯誤不容易發現(至少我沒有找到好辦法),可以直接使用Hibernate來除錯。

12.有時在測試框架(junit)中無法顯示Spring配置檔案錯誤,可以在單獨的程式單元中進行測試。

13.在需要用異常來控制事務的地方,不要捕獲這個異常,或者再次丟擲一個異常!