在休眠中使用提取模式

时间:2012-01-21 14:52:37

标签: hibernate

假设我们在客户和电话之间存在一对多的关系..

class Customer{

@OneToMany(cascade = {CascadeType.ALL},mappedBy = "customer", fetch = FetchType.LAZY)
@Fetch( FetchMode.SELECT)
private List<Phone> phoneList;

}

在上面的代码中,有什么区别 fetch = FetchType.LAZY和FetchMode.SELECT。

我读到它们都是相同的,即它们都懒洋洋地加载了底层集合。

有人可以解释一下我在哪个时使用?

1 个答案:

答案 0 :(得分:13)

获取类型(lazy / eager)是指何时 Hibernate将获取关联,无论是在提取实体(eager)时是否提前,或者是否等待代码请求关联(懒)。

获取模式(select / join)是指 Hibernate将如何获取关联,即它是使用额外的SELECT语句,还是使用连接。

这些的某些组合没有意义,例如懒+加盟。如果你使用延迟提取,则可以选择SELECT提取模式。

如果您使用预先获取,则可以选择使用提取模式。