zoukankan      html  css  js  c++  java
  • 详解Hibernate中的“1+N”问题

    1+N问题也可以叫N+1问题,什么是1+N问题呢?
    如果在一个对象里关联另一个对象,并且fetch = FetchType.EAGER。
    比如说ManyToOne(OneToMany也存在这种问题)关联,本来只需要取Many里的对象属性,可是Many里关联的对象都会单独再发一条语句取关联对象的属性。
    本来只用发一条就可以查出Many里的对象属性,可是它发了一条语句后,再发N条语句取关联对象的数据。

    解决办法:
    1、 设置多的那方的FetchType为LAZY :在合适的时候才发出语句(按需要发语句)。
    2、BatchSize:在One对象设置Size后,取出Many里的数据后,再发N/Size条语句取关联对象的数据,从而达到少发语句的目的。(----不能彻底解决~

    3、使用Join Fetch:(使用Criteria或者写HQL语句时在后面加上left join fetch w.category)将Many与One做外连接,因此只要发一条语句就可以查出Many与其相关联的One对象数据,Criteria默认就是这种做法。

     

    如何选择解决办法:
    如果只要用Many里的对象,不用关联对象的属性,那就用方法1解决;
    如果要Many里的对象属性,也想要关联的对象属性就用方法3解决。

  • 相关阅读:
    BZOJ 2876 骑行川藏
    BZOJ 2875 随机数生成器
    DT_修改注册项
    ip001
    ip
    阿里大鱼 阿里云api
    JS_全
    destoon框架二次开发【整理】
    destoon_笔记
    栏目class导航
  • 原文地址:https://www.cnblogs.com/gxpblogs/p/3085759.html
Copyright © 2011-2022 走看看