延迟加载就是一个bean的XXX属性,直到getXXX()时才会去数据库取得, 默认是Service层执行完就关闭session了?所以到Action层时,再调用getXXX()会报错? 所以,需要在web.xml里加OpenSessionInViewFilter, 它会在request开始时,弄一个Session,然后进行后续动作,直到response结束才关闭这个session, 这样,Action层再getXXX()时就不会报错了。
不咋懂,大概这意思吧。
<filter> <filter-name>hibernateFilter</filter-name> <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class> <init-param> <param-name>sessionFactoryBeanName</param-name> <param-value>sessionFactory</param-value> </init-param> </filter> <filter-mapping> <filter-name>hibernateFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
OpenSessionInViewFilter只能指定一个sessionFactoryBeanName,默认就是“sessionFactory”。
当你有多个数据源时,你会做多个dataSource,多个sessionFactory,多个dao~~
反正都是多套~~
那么,问题来了,这只能写一个sessionFactory的名字~~
结果就是只有用这个sessionFactory的dao的延迟加载是OK的,
用其它的sessionFactory的延迟加载是报错的,说no session什么的~~
-------------------------------
郁闷了大半天,又搜又查的~~
妈的,解决方法很简单~~再加一个这个Filter就行了
<filter> <filter-name>hibernateFilter2</filter-name> <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class> <init-param> <param-name>sessionFactoryBeanName</param-name> <param-value>sessionFactory2</param-value> </init-param> </filter> <filter-mapping> <filter-name>hibernateFilter2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
-------------------------------------- 感谢这篇文章: http://softwaredevtips.wordpress.com/2012/05/25/springhibernate-multiple-datasources/
|