gpt4 book ai didi

java - 关于 hibernate 中的获取策略以及获取类型与获取模式的关系的一些查询?

转载 作者:搜寻专家 更新时间:2023-10-31 08:13:59 25 4
gpt4 key购买 nike

我浏览了网上一些关于 hibernate 获取策略的链接。我喜欢的一个简洁明了的链接是 http://www.mkyong.com/hibernate/hibernate-fetching-strategies-examples/ .我们有四种类型的获取策略。这些是:-

  1. fetch-”join” = 禁用延迟加载,始终加载所有集合和实体。
  2. fetch-”select”(默认)= 延迟加载所有集合和实体。
  3. batch-size=”N” = 获取最多“N”个集合或实体,不记录
  4. fetch-”subselect” = 将其集合分组到子 select 语句中。

我的第一个问题是上面哪一个符合急切或延迟加载获取类型?

为了提出有关 hibernate 获取策略的问题,我正在考虑在我的 Department 类中使用以下代码片段

  @OneToMany(mappedBy = "department", cascade = CascadeType.ALL, fetch = FetchType.EAGER,      orphanRemoval = true)
@Fetch(value = FetchMode.SELECT)
@BatchSize(size = 10)
private Set<EmployeeData> employees = new HashSet<EmployeeData>();

根据我的理解,一旦我提到 fetchtype 是 eager,我就只剩下 join fetch strategy 但是当我提到 fetchtype 是 lazyloading 时,我有其他三个选项,即 select、batch-size 和 subselect。同意吗?现在,如果我查看我遗留项目中的代码片段,它提到获取类型作为 eager 和获取策略作为选择相互矛盾的。对吧?

另一个查询是我在编写 FetchMode 时没有看到批量大小选项。并在 eclipse 中执行 control + space,尽管我看到其他三种获取策略?

最佳答案

Hibernate 集合具有提取类型和提取模式设置。

提取类型指定何时检索集合的元素,提取模式指定如何 Hibernate 检索它们。

因此,FetchMode.SELECTFetchMode.SUBSELECT 对于 FetchType.EAGERFetchType.LAZY 都是合法的>。不同之处在于,使用 FetchType.EAGER 会立即执行一个额外的选择查询,而使用 FetchType.LAZY 它会在第一次访问集合后执行。

但是,

FetchMode.JOINFetchType.LAZY 没有意义。

Batch size 是对FetchMode.SELECT 的额外优化,所以应该由它自己的注解(@BatchSize)配置,与无关>FetchMode 枚举本身。

另请参阅:

关于java - 关于 hibernate 中的获取策略以及获取类型与获取模式的关系的一些查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8970540/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com