jpa hibernate延迟问题解决


如果出现org.hibernate.LazyInitializationException异常,no session orsession is closed,那是因为你使用了JPA或者hibernate的延时加载方法,并在访问对象的时候,session已经关闭。

方式一:在:web.xml中添加Filter
1:hibernate 解决( 方法(1)建立在未修改默认的sessionFactory,如修改方法(2) )
   (1)
        HibernateFilter
         org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
        HibernateFilter
        /*
(2)
hibernateFilter
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
sessionFactoryBeanName
XXSessionFactory
//默认是 sessionFactory
// XXSessionFactory为Spring配置文件中的sessionFactory对应的 
//XXSessionFactoryclass ="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean" >
hibernateFilter
/*

2:Jpa解决
   (1)
        SpringOpenEntityManagerInViewFilter
        org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter
   
   
        SpringOpenEntityManagerInViewFilter
        /*
     
(参考自
jpa hibernate延迟问题解决
)

方式二:
1:Jpa解决(jpa配置文件事务的配置,service主方法加@Transactional)

class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
dataSource
">









true
true
update
org.hibernate.dialect.Oracle10gDialect




class="org.springframework.orm.jpa.JpaTransactionManager">




懒加载详解
  1.  @OneToMany(fetch=FetchType.)的选项有,如下图:   
  2.         FetchType.EAGER:代表立即加载;   
  3.         FetchType.LAZY:代表延迟加载。   
  4.                
  5.     当我们把fetch设置为FetchType.LAZY的时候,什么时候初始化items里面的数据呢?当我们第一次访问这个属性,并对这个属性进行操作的时候,这个集合的数据才会从数据库里面load出来。但要注意:当我们访问这个延迟属性的时候,我们的前提要EntityManager这个对象没有被关闭,如果被关闭了我们再去访问延迟属性的话,就访问不到,并抛出延迟加载意外。   
  6.     如果没有设置fetch这属性的话,会怎么样呢?是立即加载?还是延迟加载呢?   
  7.     记住@OneToMany这个标签最后的英文单词,如果是要得到Many的一方,我不管你前面是什么,只要后面的单词是Many,也就是说要得到多的一方,你们就给我记住,默认的加载策略就是延迟加载(Many记录可能上几万条,立即加载的话可能对效率影响大,所以延迟加载)。   
  8.     反过来,如果后面是One呢?因为它是加载一的一方,这对性能影响不是很大,所以它的默认加载策略是立即加载。   
  9.        
  10.     mappedBy:我们怎么知道关系的维护端和被维护端呢?当然JPA规范规定多的一端应该是为维护端(关系维护段增加一个字段为外键,里面保存的是一的一端的主键),一的一端为关系被维护端,那么我们总要在程序里给他们打上标志吧?虽然规范是这么规定,但总要申明一下吧?就是通过mappedBy属性,只要哪个类出现了mappedBy,那么这个类就是关系的被维护端。里面的值指定的是关系维护端。   
  11.     orderItem这边由哪一个属性去维护关系呢?是OrderItem类的order属性。   
  12.     mappedBy属性对应Hibernate里面的inverse属性:   
(参考自JPA 一对多延迟加载与关系维护)
待完善........

你可能感兴趣的:(jpa hibernate延迟问题解决)