Hibernate + Spring (quartz) 整合懒(延迟)加载问题

开发项目的时候 在一个Job中执行了数据库操作, 用的是懒加载,但是如下错误

org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: ......., no session or session was closed

项目中使用 hibernate 注解的方式配置懒加载, 不是xml配置文件,

下面列出从网上搜集到的解决方案

1, 报如下错误

org.hibernate.LazyInitializationException: could not initialize proxy - no Session at

解决方法:

在web.xml中,配置springSevlet的位置,使用org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter,代码如下:

  <filter>
        <filter-name>Spring OpenEntityManagerInViewFilter</filter-name>
        <filter-class>org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>Spring OpenEntityManagerInViewFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

2, 一般是在定时任务quartzJob中,或者Junit测试中使用懒加载出现的错误, 报如下错误

org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: ......., no session or session was closed

解决方法:

添加事务配置注解。junit代码如下:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {
        "file:src/main/webapp/WEB-INF/applicationContext.xml",
        "file:src/main/webapp/WEB-INF/demo-servlet.xml"})
@Transactional
public class Job {
  ...
}

3, 还有一种方法说是lazy=false, 我再 OneToMany | ManyToOne 注解中设置fetch=FetchType.EAGER 也不起作用, 不知道用配置文件的行不行

时间: 2024-08-10 23:50:46

Hibernate + Spring (quartz) 整合懒(延迟)加载问题的相关文章

看看Spring的源码——Bean加载过程

最近几天跟同事聊起Spring的一些问题,对一些地方有些疑问,趁这两天有点空,看看Spring的源码,了解下具体的实现细节.本文基于Spring 4.0.5版本. 首先Web项目使用Spring是通过在web.xml里面配置org.springframework.web.context.ContextLoaderListener初始化IOC容器的. <listener> <listener-class>org.springframework.web.context.ContextL

Hibernate+Spring+Struts2整合开发中的一个分页显示方案(转载)

分页显示一直是web开发中一大烦琐的难题,传统的网页设计只在一个JSP或者ASP页面中书写所有关于数据库操作的代码,那样做分页可能简单一点,但当把网站分层开发后,分页就比较困难了,下面是我做Spring+Hibernate+Struts2项目时设计的分页代码,与大家分享交流. 1.DAO层接口的设计,在MemberDao接口中定义了如下两个方法: public interface MemberDao{        //省略了其他的代码        /**     * 分页查询     * @

Spring:启动项目时加载数据库数据(总结)

在项目中需要启动程序时,要将数据库的用户信息表加载到内存中,找到一下几种方式. 1.实现ApplicationListener接口,重写onApplicationEvent方法,可以在项目启动的时候执行该方法. @Component("userInit") public class UserInit implements ApplicationListener { public static Map<String,User> map=new HashMap<Strin

spring启动component-scan类扫描加载过程---源码分析

有朋友最近问到了 spring 加载类的过程,尤其是基于 annotation 注解的加载过程,有些时候如果由于某些系统部署的问题,加载不到,很是不解!就针对这个问题,我这篇博客说说spring启动过程,用源码来说明,这部分内容也会在书中出现,只是表达方式会稍微有些区别,我将使用spring 3.0的版本来说明(虽然版本有所区别,但是变化并不是特别大),另外,这里会从WEB中使用spring开始,中途会穿插自己通过newClassPathXmlApplicationContext 的区别和联系.

AngularJs 通过 ocLazyLoad 实现动态(懒)加载模块和依赖

好了,现进入正题,在 AngularJs 实现动态(懒)加载主要是依赖于3个主JS文件和一段依赖的脚本. 实现的过程主要是引用3个主要的JS文件 <script src="angular/1.4.8/angular/angular.min.js"></script> <script src="angular/ui-router/release/angular-ui-router.min.js"></script> &l

Agile框架之懒人加载源码剖析 (转)

大家都知道懒人加载可以让HTML5页面中的img图片可以在界面可见的时候进行显示,而不是一下子全部显示出来,极大的减缓了页面的加载效率和服务器的请求压力. 那么,在Agile中,通过给img设置data-source即可达到懒人加载的效果,这时候可以给img设置placeholder指明图片在请求完成之前显示的默认图片. 示例一: <li class="table-view-cell media"><a class="navigate-right"

spring启动component-scan类扫描加载过程(转)

文章转自 http://www.it165.net/pro/html/201406/15205.html 有朋友最近问到了 spring 加载类的过程,尤其是基于 annotation 注解的加载过程,有些时候如果由于某些系统部署的问题,加载不到,很是不解!就针对这个问题,我这篇博客说说spring启动过程,用源码来说明,这部分内容也会在书中出现,只是表达方式会稍微有些区别,我将使用spring 3.0的版本来说明(虽然版本有所区别,但是变化并不是特别大),另外,这里会从WEB中使用spring

hibernate+spring+struts2整合

这三个都是java的知名框架(SSH)struts2,作为控制器,也就相当于servlet,采用拦截器机制处理用户的请求.hibernate,持久化框架.spring,java分层的轻量级框架.用来管理,提供依赖注入,切面等.如有错误,欢迎指正.SSH框架整合首先时web.xml配置,hibernate的一大亮点就是延迟加载,就是在你需要的时候才会真正的发送SQL语句.加上OpenSessionInView是因为如果在首页需要在数据库加载数据时如果时延迟加载则会引发首页无数据的问题,只要使用了h

Hibernate中使用load和get加载的区别

一. Hibernate使用load机制和使用get加载的区别(重点) 1.相同点:get 和load他们都可以通过指定的实体类与ID从数据库中读取数据,并返回对应的实例 2. 不同点:如果找不到符合条件的纪录,get()方法将返回null.而load()将会报出ObjectNotFoundEcception. 2.1get 是直接从数据库中检索   而load会使用懒加载(延迟加载)产生一个代理对象,属性oid 2.2 使用load加载,Hibernate会认为该id对应的对象是一定存在的,所