Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 了解Hibernate Hibernate.max_fetch_depth和Hibernate.default_batch_fetch_size_Java_Hibernate - Fatal编程技术网

Java 了解Hibernate Hibernate.max_fetch_depth和Hibernate.default_batch_fetch_size

Java 了解Hibernate Hibernate.max_fetch_depth和Hibernate.default_batch_fetch_size,java,hibernate,Java,Hibernate,提供了一些Hibernate配置属性。其中, hibernate.max\u fetch\u depth 为单端连接的外部连接获取树设置最大“深度” 关联(一对一、多对一)。0将禁用默认外部设置 加入抓取。e、 g.建议值介于0和3之间 休眠。默认批处理提取大小 为Hibernate批量获取关联设置默认大小。例如 建议值4、8、16 我是新来的冬眠,有人能帮我理解这个例子吗 提前感谢。max\u fetch\u depth: 想象一个人和一个地址实体。每个人住在一个地址(非常简单的系统),但许多

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

hibernate.max\u fetch\u depth

为单端连接的外部连接获取树设置最大“深度” 关联(一对一、多对一)。0将禁用默认外部设置 加入抓取。e、 g.建议值介于0和3之间

休眠。默认批处理提取大小

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

我是新来的冬眠,有人能帮我理解这个例子吗

提前感谢。

max\u fetch\u depth: 想象一个人和一个地址实体。每个人住在一个地址(非常简单的系统),但许多人可能住在同一个地址。在对象模型中,一个人可能有一个address属性。这将被映射为一个(如文档所述)。 现在,当从数据库中提取人员时,hibernate会遇到此属性。在数据库中,它是一列,带有地址表的外键。要获取关联对象,可以使用此表的联接。生成的数据将用于填充将在person的Address属性上设置的Address对象。从这个意义上说,Hibernate在获取对象时遍历对象图。 现在,如果地址有一个不动产城市呢?这也将是多对一,并将导致通过相同的逻辑进行连接。如果这个城市有一个不动产国家怎么办?同样的事情。 执行多个联接将对性能不利。在某些情况下,最好进行单独的选择,从缓存中获取数据或插入代理。此配置属性确定hibernate在获取数据时通过联接遍历的关联数

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

什么是我将max_fetch_depth设置为2,然后尝试访问person.getAddress().getCity().getCountry()。由于我已将max_fetch_depth设置为2,这是否会返回一个空指针?不,您所有的manytone渴望实体都已水合,但深度为2后,Hibernate将为图形的剩余深度生成新的特定查询。在我们的示例中,第一个查询将返回Person+Address+City实体,并将执行新的查询以获取国家实体
默认\u batch\u fetch\u size
与上面解释的内容不同-它与集合无关!在获取未初始化属性(例如OneToOne)的过程中,它不仅获取实体的值,而且还从BatchFetchQueue获取多达
default\u batch\u fetch\u size
-1个其他实体的值。请参阅《用户指南》的“获取”和“批处理属性”部分(数量和链接取决于版本)。