`
fanyo
  • 浏览: 44425 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

实际应用:one-to-many,fetch最好不要设置多个join

阅读更多
最近美国customer报了个问题,1条huge数据 (2个1000子数据)读取 java map out of memory.
分析了下原因,
A 表 onetomany B
A 表 onetomany C
A 表 onetoone D

读取A的一条数据 大约包含1000个B, 1000个C, 读取的时候就内存溢出了。
看了下log,发现读取的SQL: A left join B left join C leftjoin D,
返回 700,000条结果,这就是问题所在了。。。
这几个表每个表都 20+个column,再好的服务器也溢出了。

看了下A.hbm.xml, B 和 C 和 D都是 fetch=join.
fetch设置join, lazy只能是false。

分析下逻辑 1000个C 的访问性需求没1000个B高, 将C设置为fetch=select。
然后运行下,这次log里 原先sql 变为两个
A left join B leftjoin D,
select C,

发过去让customer 测试了下,好像可以了,这个问题暂时解决了。
one-to-many,fetch最好不要设置多个join,最常用的设为join。
如果设置个四五个,即使是一般不是很大的数据,结果数目 100x 100 X 100 X100还是很可怕的结果。


这样huge的数据,觉得还有问题,依次访问1000个B或C的关联对象 M或N时候 每访问一个会调用依次sql,
1000次的sql花费时间肯定不少。好在调用非PK属性时候才会调用SQL


2
1
分享到:
评论

相关推荐

    day36 07-Hibernate抓取策略:many-to-one上的抓取策略

    在"many-to-one"关系中,一个实体可以与多个其他实体相关联。默认情况下,Hibernate会设置这种关联为懒加载,即只有当我们尝试访问被关联的对象时,才会发起数据库查询。但这种方式可能不适用于所有场景,特别是在...

    Hibernate one to many(many to one) 配置

    Many-to-One是另一个常见的关联类型,它表示多个实体可以关联到一个单一的实体。例如,员工与部门的关系,多个员工可以属于同一个部门,但每个部门只有一个实体表示。在Hibernate中,使用`@ManyToOne`注解来标记这...

    Hibernate之第3解之-hibernate_hibernate_many2one_1

    Many-to-One关系是现实世界中常见的关联类型,一个实体可能对应另一个实体的多个实例,例如,一个员工可以属于一个部门,但一个部门可能有多个员工。在Hibernate中,Many-to-One关系通过配置实现,主要涉及以下几点...

    Hibernate关联关系hbm.xml中的相关属性

    最后,`<many-to-many>`标签用于定义多对多的关系,例如学生可以选择多个课程,课程也可以被多个学生选择。属性包括: 1. `name`: 集合属性的名称。 2. `class`: 多对多关联的另一端对象的类型。 3. `table`: 中间...

    Hibernate 的关联映射

    "Hibernate的关联映射"是Hibernate中的核心概念之一,用于模拟数据库中的关系,包括一对一(One-to-One)、一对多(One-to-Many)、多对一(Many-to-One)和多对多(Many-to-Many)四种关系。现在,让我们详细探讨...

    hibernate 关联映射(一) many to one

    在数据库设计中,Many to One是一种常见的关系,即一个实体(表)可以与多个其他实体相关联,而另一个实体则只与一个实体相关联。 首先,我们需要理解Hibernate的实体类和映射文件。实体类是Java对象,它们代表...

    hibernate-one-to-many

    在实际应用中,我们可以通过Hibernate提供的API进行一对多关系的增删查改操作。例如,添加一个新员工到部门: ```java Department department = session.load(Department.class, departmentId); Employee employee ...

    hibrenate xml 配置 映射

    在Java的持久化框架Hibernate中,XML配置是用于定义对象关系映射(ORM)的关键部分。这涉及到将数据库中的表与Java对象...在实际应用中,应根据需求选择合适的关联类型,并妥善管理XML配置以确保数据持久化的正确性。

    Hibernate一对多(多对一)双向关联(annotation/xml)

    在Java的持久化框架Hibernate中,一对多(Many-to-One)和多对一(One-to-Many)的关系映射是数据库关系模型中的常见关联类型。本文将深入探讨这两种关联方式在使用Hibernate时的配置,包括基于注解(Annotation)和...

    hibernate_many2one

    在Hibernate中,`many2one`关系表示多个实体可以与单个实体关联。例如,在一个学校系统中,多个学生可以属于同一个班级,这里的学生和班级就形成了一个典型的多对一关系。在数据库层面,这种关系通常通过外键来实现...

    hibernate面试题2

    - 通过配置文件如`one-to-many`、`many-to-one`、`many-to-many`等映射关系,实现类与类的关联。 8. **Hibernate缓存机制**: - **一级缓存**(内部缓存):默认事务级缓存,每个Session内部维护。 - **二级缓存...

    JPA

    - **多对多(Many-to-Many)**:这种关系涉及多个实体之间的关联。`@ManyToMany`注解用于映射这种关系,并且通常会有一个中间关联表。`@JoinTable`注解用于定义中间关联表的结构。 ### 总结 JPA是Java应用中处理...

    hibernate ppt

    2. **一对多关联(One-to-Many)**:比如,一个部门可以有多个员工,Employee 实体和 Department 实体之间的关联就是一对多。配置时,可以在多方实体(如 Employee)中使用 `many-to-one` 标签,而在一方实体(如 ...

    hibernate映射关系

    本文将深入探讨Hibernate中的三种主要映射关系:一对一(One-to-One)、一对多(One-to-Many)以及多对多(Many-to-Many)。 ### 一对一映射(One-to-One) 一对一映射在现实世界中非常常见,例如一个人只有一个...

    hibernate延迟加载技术详细解

    <many-to-one name="mother" class="Cat" fetch="join"/> ``` 5. **性能调优**: - 通过调整 Fetching 策略可以显著改善应用程序性能。 - 例如,可以使用 Join Fetching 来减少 N+1 查询问题,尤其是在复杂的多...

    Hibernate映射解析 七种映射关系 后端 - Java.zip

    多个实体可以对应多个其他实体,如学生可以选择多门课程,课程也可以被多个学生选修。多对多映射通过中间表(join table)实现,使用`@ManyToMany`注解,并指定`@JoinTable`来定义中间表的细节。 5. **双向映射** ...

    Hibernate 一对一,一对多,多对多例子

    2. **一对多关联(One-to-Many)**:一个实体可以拥有多个关联实体。这通常在实体类中使用`@OneToMany`注解表示,同时可以指定`fetch`策略(EAGER/LAZY),决定关联数据是否在加载主体时一起加载。还可以通过`@...

    hibernate常用一对一、一对多、多对一、多对多映射关系真实例子(华南银行项目)

    我们将从实际应用的角度出发,通过具体的代码示例来理解这些概念。 **一对一映射(One-to-One)** 一对一映射通常用于两个实体之间存在唯一对应的关系,例如一个银行账户只能关联一个客户信息。在Hibernate中,我们...

Global site tag (gtag.js) - Google Analytics