升级hibernate>4,spring>3.1笔记
来源:互联网 发布:日本变态杀人犯知乎 编辑:程序博客网 时间:2024/06/06 05:11
看着hibernate和spring的RELEASE版出来很久了.心痒就想升级一下.结果问题真来的不少 ...记录下来.
spring升到3.1倒是简单,删除旧包,加新包,然后配置的 xsi:schemaLocation 版本由 3.0 改写成 3.1 其它基本可以原封不动的运行了.
接着还是改spring里的 hibernate (使用 annotation) bean 配置.
先是SessionFactory 的 org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean 要改成org.springframework.orm.hibernate4.LocalSessionFactoryBean 还以为只要把 hibernate3 换成4就可以了,结果发现spring 3.1里没有这个类了.annotation也是使用的LocalSessionFactoryBean.这个不改会报 cache.XXX 找不到类的错误.
接着把 org.springframework.orm.hibernate3.HibernateTransactionManager 改成 org.springframework.orm.hibernate4.HibernateTransactionManager
然后移除hibernateTemplate.这个很重要,spring 3.1不再支持hibernateTemplate了.不晓得什么原因...没深究
然后就是大面积的修改类了...
因为不再使用 hibernateTemplate,都要改成 sessionFactory.getCurrentSession()...
这个转变其实也不算难,唯一有些区别的是对 DetachedCriteria 的操作.
hibernateTemplate.findByCriteria (DetachedCriteria,first,max) 换成 DetachedCriteria.getExecutableCriteria(sessionFactory.getCurrentSession()).setFirstResult(first).setMaxResults(max).list()
直接使用 sessionFactory.getCurrentSession().createCriteria(XXX.class) 代替 DetachedCriteria 是最简单的了.
Criteria 去看看 hibernate的官方帮助里面有很详细的说明,足以轻松替换掉 hibernateTemplate , 改完基本也就升级完成了.
MVC OpenSessionInViewFilter:
- <filter>
- <filter-name>openSessionInViewFilter</filter-name>
- <filter-class>org.springframework.orm.hibernate4.support.OpenSessionInViewFilter</filter-class>
- <init-param>
- <param-name>singleSession</param-name>
- <param-value>true</param-value>
- </init-param>
- <init-param>
- <param-name>sessionFactoryBeanName</param-name>
- <param-value>mySessionFactory</param-value>
- </init-param>
- </filter>
- <filter-mapping>
- <filter-name>openSessionInViewFilter</filter-name>
- <url-pattern>/*</url-pattern>
- </filter-mapping>
另有多个数据源的问题:
原来旧版本没有的问题...就是有2个数据源,原先定义的2个sessionFactory 都能正常使用,但是升级后,第二个出现 No Session found for current thread 的问题.
可以简单用下面的方法解决这个问题.保险的话还是用JTA 去实现比较好...
spring配置里定义2个 transactionManager,然后 tx:annotation-driven 默认会使用名为 transactionManager 的那个.
<bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory1"/>
</bean>
<bean id="transactionManager2" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory2"/>
</bean>
<tx:annotation-driven transaction-manager="transactionManager"/>
接着在类里用到第二个 sessionFactory 的方法上再加上 @Transactional(value="transactionManager2")
@Transactional
public void method1(){
method2()
}
@Transactional(value="transactionManager2")
public void method2(){
//这里用到了 sessionFactory2
}
因为我的第二个数据源是只读,所以也就没去判断这个事务是否会正常回滚.理论上是不会回滚的...
==================================================================
附多数据源:
http://www.360doc.com/content/09/1222/17/18042_11742680.shtml
http://www.cnblogs.com/sky7034/archive/2011/08/11/2134411.html
http://blog.csdn.net/wangdonghua2261/article/details/3872975
- 升级hibernate>4,spring>3.1笔记
- 升级hibernate>4,spring>3.1笔记
- 升级spring和hibernate到4遇到的问题总结
- 【开发笔记】JAVA工程升级的差异对比(Spring MVC 4.3.8+Hibernate 5.2.10)
- spring和hibernate升级过程记录
- Spring3 升级Spring 4
- Struts+spring+hibernate学习笔记!
- Struts+spring+hibernate的笔记.
- Struts+Spring+Hibernate整合笔记
- Struts+Spring+Hibernate 整合笔记
- Struts + hibernate +spring课堂笔记
- 关于Struts2.hibernate,spring(笔记)
- Spring中Hibernate配置笔记
- Spring-Hibernate整合 学习笔记
- Spring 学习笔记整合 Hibernate
- Spring 学习笔记 整合Hibernate
- 笔记(Spring管理Hibernate)
- Spring学习笔记:spring集成hibernate
- Oracle语句优化规则汇总(8)
- Oracle语句优化规则汇总(9)
- 解决:10.6.7安装xcode 4.2 提示安装失败
- Oracle语句优化规则汇总(10)
- Android ListView中图片的异步加载显示
- 升级hibernate>4,spring>3.1笔记
- Mysql数据库中的一些知识点
- 802.11协议帧间间隔-SIFS,DIFS,PIFS,EIFS
- FinderIntroductionAspect Aop
- Thrift之TProtocol类体系原理及源码详细解析之类继承架构分析
- JMX入门
- dhtmlxgrid 自定义单元格 edit getValue setValue 事件
- nJava分布式应用学习笔记08JMX规范与各种监控场景
- java设计模式追MM