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已经关闭了。这个该怎么解决
...全文
95 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
上面的引用错了,我是对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
BUG弄潮儿 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>
智鹿软件 2011-02-21
  • 打赏
  • 举报
回复
一般开发里面都不会延迟加载,采用非延迟加载吧。
psjcarlos 2011-02-21
  • 打赏
  • 举报
回复
可以开启openSessionInView来解决这个问题。
不过会牺牲性能。
  • 打赏
  • 举报
回复
没有人吗?

81,094

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧