博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
转升级hibernate>4,spring>3.1笔记
阅读量:6514 次
发布时间:2019-06-24

本文共 2908 字,大约阅读时间需要 9 分钟。

hot3.png

看着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:

[html]
  1. <filter>  
  2.         <filter-name>openSessionInViewFilter</filter-name>  
  3.         <filter-class>org.springframework.orm.hibernate4.support.OpenSessionInViewFilter</filter-class>  
  4.         <init-param>  
  5.             <param-name>singleSession</param-name>  
  6.             <param-value>true</param-value>  
  7.         </init-param>  
  8.         <init-param>  
  9.             <param-name>sessionFactoryBeanName</param-name>  
  10.             <param-value>mySessionFactory</param-value>  
  11.         </init-param>  
  12. </filter>  
  13.       
  14. <filter-mapping>  
  15.         <filter-name>openSessionInViewFilter</filter-name>  
  16.         <url-pattern>/*</url-pattern>  
  17. </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

转载于:https://my.oschina.net/blueskyer/blog/374942

你可能感兴趣的文章
Grunt 一个专为JavaScript提供的构建工具
查看>>
InputStream为什么不能被重复读取?
查看>>
[外挂2] 鼠标单击事件
查看>>
那一刻,我瞥见了内心中渺小的自己
查看>>
153. Find Minimum in Rotated Sorted Array
查看>>
数据结构与算法系列 目录
查看>>
『原创』+『参考』基于PPC的图像对比程序——使用直方图度量
查看>>
The Two Stories(五)
查看>>
分享7个最新的使用jQuery实现的悬浮特效
查看>>
VB.NET语法小结
查看>>
python 集合类型
查看>>
在C#代码中应用Log4Net(二)典型的使用方式
查看>>
查看iOS沙盒(SanBox)文件
查看>>
weblogic cluster error-----Could not= open connection with host: 127.0.0.1
查看>>
Spring事务传播特性的浅析——事务方法嵌套调用的迷茫
查看>>
linux如何ARP嗅探 Linux下嗅探工具Dsniff安装记录
查看>>
程序员水平分级 你属于哪一类?
查看>>
rails3.1 release
查看>>
ubuntu server 下部署apache+django+mod_wsgi环境
查看>>
cocos2dx游戏--欢欢英雄传说--添加触摸响应
查看>>