Spring4+Hibernate4事務小記

學習Spring+Hibernate,很是強大的框架,爲了追新,就直接從最高版本開始學習了,這要冒很大的風險,由於網上可查到的資料大可能是針對舊版本的,好比Spring3,Hibernate3。spring

根據個人測試,記錄以下:session

1.Spring4事務必須針對接口,不然報錯。(以前能夠不針對接口?)若是沒有事務,則bean普通類也能夠注入。app

2.事務能夠放在接口上,也能夠放在實現上。框架

3.注意應用程序空間必須統一,不然事務失敗。ide

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錯誤。spa

(這個多是我配置的有問題?)hibernate

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.在須要用異常來控制事務的地方,不要捕獲這個異常,或者再次拋出一個異常!

 

絕對新手,歡迎大俠們對不當的地方指正!

相關文章
相關標籤/搜索