“no session”异常,在使用hibernate3.0之前可以在如下处理
//在下面set 加上 lazy="false" 这个意思是你要延时加载吗 false就是不要
<set lazy="false" name="orderItems" inverse="false" cascade="save-update">
<key column="oid"/>
<one-to-many class="com.zking.hbdemo.entity.OrderItem"/>
</set>
即将延迟加载(也叫惰性加载)设置为false,但不用这么做,第一的原因是这样对性能影响很大,第二是hibernate3.0以后关联级别均为延时加载(代理对象)
注意!注意!这个这是在3.0版本之前的
3.0版本之后的处理方式
解决方案:
- 编程控制,Hibernate.initialize(对象);
- 在与spring集成后,使用spring中工具类
//编程控制
Session session = SessionFactoryUtil.OpenSession();
Order or = session.load(Order.class, order.getOrderId());
//在下面加一个Hibernate.initialize(对象);
Hibernate.initialize(or);
在与spring集成后,使用spring中工具类在web.xml里面配置下面的
<!-- 就是允许在每次的整个request的过程中使用同一个hibernate session,可以在这个request任何时期lazy loading数据 -->
<filter>
<filter-name>OpenSessionInViewFilter</filter-name>
<filter-class>org.springframework.orm.hibernate5.support.OpenSessionInViewFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>OpenSessionInViewFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
这样就可以解决延时加载 on Session的问题了
版权声明:本文为su_sheng_yu原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。