学习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.在须要用异常来控制事务的地方,不要捕获这个异常,或者再次抛出一个异常!
绝对新手,欢迎大侠们对不当的地方指正!