我已经浏览了一些网络上的休眠获取策略链接。我喜欢的一个简短而简洁的链接是 http://www.mkyong.com/hibernate/hibernate-fetching-strategies-examples/。我们有四种获取策略。这些都是 :-
- fetch-”join” = 禁用延迟加载,始终加载所有集合和实体。
- fetch-”select”(默认)=延迟加载所有集合和实体。
- batch-size=”N” = 最多获取“N”个集合或实体,不记录。
- fetch-”subselect” = 将它的集合分组到一个 sub select 语句中。
我的第一个问题是上述哪一个符合 Eager 或lazyloading 获取类型的条件?
为了提出我对休眠获取策略的疑问,我正在考虑在我的 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 为渴望时,我只剩下加入 fetch 策略,但是当我提到 fetchtype 作为延迟加载时,我还有其他三个选项,即 select、batch-size 和 subselect。同意?现在,如果我在我的一个遗留项目中查看代码片段,它提到 fetch type 为 eager 并且 fetch 策略为 select ,它们相互矛盾。对?
另一个查询是我在编写 FetchMode 时没有看到批量大小选项。尽管我看到其他三种获取策略,但在 Eclipse 中执行控制 + 空间?