• 关于Hibernate性能优化之 FetchType=Lazy时查询数据


    当表A和表B一对多的关系
    
    对于A和B的实体类,设置FetchType=EAGER时,取A表数据,对应B表的数据都会跟着一起加载,优点不用进行二次查询。缺点是严重影响数据查询的访问时间。
    
    解决办法FetchType=LAZY,此时查询的访问时间大大缩短,缺点是查询表A 的数据时,访问不到表B的数据。
    
    解决办法尝试一,在web.xml中加入下面配置,表示在页面中关闭session
    
    <!-- 把session的关闭延迟到jsp页面显示之后,在配在struts2上面。-->
        <filter>
            <filter-name>OpenSessionInView</filter-name>
            <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
        </filter>
        <filter-mapping>
            <filter-name>OpenSessionInView</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>
    出现的问题是:新增加一条记录回到列表页面,对应的B表数据还是没有。
    解决办法尝试二:
    在session未关闭前循环List,显示调用,举例如下
    for(B b:bList){
        b.getA();
    }
    出现问题:如果debug模式,可以获得A信息,如果tomcat正常运行模式,还是取不到A。没有具体研究是不是因为我们实在ManyToOne多的端取一端。
    解决办法三:此办法可以应用
    for(B b:bList){
       Hibernate.initialize( b.getA());
    }
    解决办法四:此办法也可以应用
    在session关闭后,我可以循环
    for(B b:bList){
       int aId = b.getA().getId();
      A a =  findAById(aId);
      b.setA(a);
    }

    来源:https://blog.csdn.net/janefir/article/details/19555803

  • 相关阅读:
    java事件处理(贪吃蛇)
    九九乘法表
    使用文件包含指令include
    jsp页面的基本构成
    软件测试博客

    成功职业女性处世的10大秘诀
    再见啦,冬冬妹
    网摘——杜晓眼眼中的尹珊珊:什么都要,什么都要得到
    网摘——事关“工程师思维”
  • 原文地址:https://www.cnblogs.com/hahajava/p/9073344.html
Copyright © 2020-2023  润新知