2010-12-17 107 views
2

我今天在采访中被问到了关于Hibernate的急切加载。问题是:如果有一个员工类和一个地址类和关系:1名员工 - >许多地址。 如何使用单个查询可以查询Employee类并获取所有地址?Hibernate Criteria API

我提到我们可以打开地址上的急切加载...但是这会导致N + 1 sqls。

要求是使用1个sql加载所有员工和地址。 答案应该与Hibernate Criteria API有关。当我看到网络时,我不确定如何实现这一目标。 任何想法将不胜感激。

回答

3

hibernate reference:

List cats = sess.createCriteria(Cat.class) 
    .add(Restrictions.like("name", "Fritz%")) 
    .setFetchMode("mate", FetchMode.EAGER) 
    .setFetchMode("kittens", FetchMode.EAGER) 
    .list(); 

这将检索猫的列表,像弗里茨%名称和有自己的配合参考已经加载和他们的小猫收集也已经加载。

可能应该尝试使用类似这样的方法来检查生成的sql,看看它是否正在对引用进行外部联接,并将其更多地设置为Eager。

+0

这实际上与仅使用'@Fetch(FetchType.EAGER)'有什么不同?任何想法为什么? – 2010-12-17 14:55:40