Hibernate抓取策略Lazy是可以延迟抓取的,即直到应用程序对集合进行了操作,才会去抓取
  JPA标注使用抓取策略Lazy时,当我去使用集合时却报session缓存中没有集合数据异常,
        没有延迟抓取,应该不是类似hibernate get和Load的问题啊
  JPA和Hibernate的抓取策略Lazy到底有何异同?

解决方案 »

  1.   

    CSDN出问题了,先把帖子顶上来,希望有人给点解释 呵呵  
      

  2.   

    几乎是一模一样的。lazy 只能在事务没有完成时处理,一旦事务完成就会出现异常。像 lazy 这种功能基本上就是鸡肋,没有什么用处。如果确定需要使用的时,请直接使用强制加载。
      

  3.   

    你需要使用opensessioninviewfilter
    在lazy情况下,如果事务关闭了,你再取是会报错误的。
    使用(hibernate/jpa)opensessioninviewfilter就不会了
      

  4.   

    顶4楼
    web.xml中配置:
    <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>
      

  5.   

    OpenSessionInViewFilter 是种很鸡肋的东西,把一个事务从请求一直拖到响应整整一个周期,如果并发量较高的话,这个应用立马得挂掉。人家事务范围越小越好,这个好家伙,将事务延长至整个请求/响应的生命周期。
      

  6.   

    之前不明白为什么很多人说OpenSessionInViewFilter不好,虽然我自己也没用。今天总算知道了,谢谢。
      

  7.   

    对于lazy,我的做法是都设为延迟,然后load分两种,一种是普通的load,没用load延迟属性,还有一种的是load(Class, List lazyProperties),用哪种,加载那些延迟属性在程序中判断。
    嘿嘿,虽然回复的内容跟楼主的问题木有关系,但是看到了火龙果的回复之后有点儿激动,楼主见谅。
      

  8.   

    即使用了OpenSessionInViewFilter也不一定能解决问题(前提是你真用了JPA的话)
      

  9.   

    特别是你的jsp会花输出很多内容,碰巧客户网速又不快的话,会很悲剧。
    不过,如果并非量可以忽略的话,这种偷懒的模式(不需要手工控制session/trasaction)还可以考虑的
      

  10.   

    现在的问题是,我SSH Action里面调用后才根据我需要的数据强制加载,动态强制加载,如何强制加载?
    如果在DAO底层就把所有的数据实现强制加载不是和FethType.EAGER就一样了么
      

  11.   

    在网站访问量很大数据量同样很大的系统肯定不会使用FethType.EAGER
     我花了一天的时间想到了一些思路贴出来供大家参考吧
       目标:实现动态强制加载
       使用Hibernate的Criteria条件查询(参考Hibernate3.2手册 15.5动态关联抓取)
       在Action里面通过Service业务方法,通过参数方式传递我要加载的数据
       然后再底层使用Criteria.setFetchMode("XXX","FetchMode");
       这样初步实现了动态加载了
      

  12.   


    可以强制加载??假设onetoone 设置为lazy ,怎么强制加载?我已经设置为lazyl