0

有人可以解释一下为什么使用注释@Fetch(FetchMode.SELECT)可以让我使用Lists而不是Sets吗?使用其他 fetchmode 类型有什么区别SUBSELECT

下面是一段示例代码:

class One{
   ..
   @Fetch(FetchMode.SELECT)
   @OneToMany(mappedBy="one", fetch = FetchType.EAGER, ... )
   private List<Something> listOne = new ArrayList<Something>();

   @Fetch(FetchMode.SELECT)
   @OneToMany(mappedBy="one", fetch = FetchType.EAGER, ... )
   private List<SomethingElse> listTwo = new ArrayList<SomethingElse>();
   ...
}

以这种方式它可以工作,但我想知道为什么....我发现了其他与替代解决方案的讨论,但这个不是首选的...

4

2 回答 2

2

我想官方文档是找到问题答案的最佳场所。看看这个链接

SELECT: 对每个单独的实体、集合或连接使用 select 加载 JOIN

JOIN: 使用外连接加载相关实体、集合或连接 SUBSELECT

SUBSELECT:使用子选择查询来加载额外的集合

于 2012-08-22T13:27:24.300 回答
0

您应该能够使用ListSet作为您的收藏的接口,它与获取无关。

@Fetch(FetchMode.SELECT)一起fetch = FetchType.EAGER意味着在加载One实体后休眠将立即发出第二个选择加载列表。

@Fetch(FetchMode.SUBSELECT)without意味着当fetch = FetchType.EAGER访问第一个列表元素()时,hibernate 将为所有一个实体(它们也可能是集合的一部分)加载带有子选择的列表List<SomethingElse>

于 2012-08-22T13:49:02.513 回答