关于hibernate中的fetch策略和fetchtype与fetchmode的关系的一些查询?

M S*_*ach 5 java hibernate fetching-strategy

我已经通过net上的hibernate获取策略的一些链接.我喜欢的一个简短而简洁的链接是 http://www.mkyong.com/hibernate/hibernate-fetching-strategies-examples/.我们有四种类型的获取策略.这些是 :-

  1. fetch-"join"=禁用延迟加载,始终加载所有集合和实体.
  2. fetch-"select"(默认)=延迟加载所有集合和实体.
  3. batch-size ="N"=提取到'N'个集合或实体,不记录.
  4. fetch-"subselect"=将其集合分组为子选择语句.

我的第一个问题是上述哪一个符合eager或lazyloading fetch类型的资格?

为了提出我对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>();
Run Code Online (Sandbox Code Playgroud)

根据我的理解,一旦我提到fetchtype为eager,我只留下了连接获取策略但是当我提到fetchtype作为lazyloading时,我还有其他三个选项,即select,batch-size和subselect.同意?现在,如果我在我的遗留项目中查看代码片段,它会将提取类型称为渴望和获取策略,因为select会相互冲突.对?

另一个问题是在编写FetchMode时看不到批量大小选项.虽然我看到其他三种获取策略,但是在eclipse中控制+空间?

axt*_*avt 16

Hibernate集合具有获取类型和获取模式设置.

Fetch类型指定何时检索集合的元素,而fetch模式指定Hibernate 如何检索它们.

所以,FetchMode.SELECTFetchMode.SUBSELECT有法律既FetchType.EAGERFetchType.LAZY.不同之处在于,FetchType.EAGER立即执行额外的选择查询,而FetchType.LAZY在第一次访问集合后执行查询.

FetchMode.JOIN但是,没有意义FetchType.LAZY.

批量大小是一个额外的优化FetchMode.SELECT,因此它应该由它自己的注释(@BatchSize)配置,并且与FetchMode枚举本身无关.

也可以看看: