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.在须要用异常来控制事务的地方,不要捕获这个异常,或者再次抛出一个异常!

 

绝对新手,欢迎大侠们对不当的地方指正!

相关文章
相关标签/搜索