了解Hibernate hibernate.max_fetch_深度和hibernate.default_batch_fetch_size

问题描述 投票:0回答:1

Hibernate 文档 提供了一些 Hibernate 配置属性。其中,

hibernate.max_fetch_深度

为单端的外连接获取树设置最大“深度” 关联(一对一、多对一)。 A 0 禁用默认外部 加入抓取。例如建议值在 0 到 3 之间

hibernate.default_batch_fetch_size

设置 Hibernate 批量获取关联的默认大小。例如 建议值 4、8、16

我是 Hibernate 的新手,有人可以通过一个例子帮助我理解这一点吗?

提前致谢。

java hibernate
1个回答
22
投票
最大获取深度

想象一个人和一个地址实体。每个人都住在一个地址(非常简单的系统),但很多人可能住在同一个地址。在对象模型中,Person 可能有一个地址属性。这将被映射为多对一(如文档所述)。 现在,当从数据库中获取 Person 时,hibernate 会遇到此属性。在数据库中,它是具有地址表外键的列。要获取关联的对象,可以使用该表的联接。生成的数据将用于填充将在人员的地址属性上设置的地址对象。从这个意义上说,Hibernate 在获取对象时会遍历对象图。

现在如果 Address 有一个属性 City 会怎样?这也将是多对一的,并会导致按相同逻辑进行连接。如果城市有一个地产国家会怎样?同样的事情。

进行多次连接会降低性能。在某些时候,最好进行单独的选择,从缓存中获取数据或注入代理。这个配置属性决定了hibernate在获取数据时会通过join遍历多少个关联。

default_batch_fetch_size

这是一个非常低级的属性,它确定 Hibernate 在查询集合关联时将请求 JDBC 驱动程序获取/加载多少行。如果您要查询一个国家/地区的所有城市(前面的示例),那么通过 JDBC 连接批量加载数据,将数据作为对象跨入内存的过程将更加简化。然而,与环相比,执行查询和应用程序处理数据所需的时间通常是微不足道的。将配置属性保留为默认值通常是正确的。

© www.soinside.com 2019 - 2024. All rights reserved.