hibernate+Spring的事务配置问题

面朝大海&春暖花开 2011-02-21 01:04:17
直接拿例子说明问题吧!
比如有2个类A和B。其中A中有一个属性是B类型的。我在业务逻辑中有一个函数是返回A类型的函数getA()吧
当我们调用完getA后得到了A的对象a。这个时候hibernate由于lazy并没有加载a对象中的b。但是这个时候session已经关闭了。如果我在调用a.b的话就报错了,因为session已经关闭了。这个该怎么解决
...全文
63 点赞 收藏 8
写回复
8 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
上面的引用错了,我是对5楼说的。呵呵
回复
[Quote=引用 4 楼 huangjinjin520 的回复:]
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
<filter>
<filter-name>OpenSessionInV……
[/Quote]
哦,我这里只是说明问题说是查询出A对象。其实我查的是A的list。用的是模板的find(hql)方法,我看了底层,他是createQuery实现的。他支持lazy。除非我把配置的lazy设置为false,但是这样又搭不到我的目的了,如果都设为false,A中有B,B中有C,C中有D……而且是list,那list中的每个A都会吧BCD都查一遍。现在我就只想用下B,甚至不用B
回复
[Quote=引用 4 楼 huangjinjin520 的回复:]
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
<filter>
<filter-name>OpenSessionInV……
[/Quote]

你看我的配置
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<filter>
<filter-name>Spring character encoding filter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>GBK</param-value>
</init-param>
</filter>

<filter-mapping>
<filter-name>Spring character encoding filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

<filter>
<filter-name>hibernateFilter</filter-name>
<filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>hibernateFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
我配了2个filter。是不是要把第一个去掉啊
回复
魔都 2011-02-21
查询的时候用的load吧,应该用get.试试.不行的化再试试.FetchType.EAGER
回复
huangjinjin520 2011-02-21
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
<filter>
<filter-name>OpenSessionInViewFilter</filter-name>
<filter-class>
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>OpenSessionInViewFilter</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<servlet>
回复
QQCrazyBoy 2011-02-21
一般开发里面都不会延迟加载,采用非延迟加载吧。
回复
psjcarlos 2011-02-21
可以开启openSessionInView来解决这个问题。
不过会牺牲性能。
回复
没有人吗?
回复
相关推荐
发帖
Web 开发
创建于2007-09-28

8.0w+

社区成员

Java Web 开发
申请成为版主
帖子事件
创建了帖子
2011-02-21 01:04
社区公告
暂无公告