我今天在采访中被问到有关Hibernate渴望加载的问题。问题是:如果有一个Employee类和一个地址类和关系:1名员工 - >很多地址。 如何使用单个查询查询Employee类并获取所有地址?
我提到我们可以打开地址上的急切加载......但这会导致N + 1平方。
要求是使用1 sql加载所有员工和地址。 答案应该与Hibernate Criteria API有关。当我在网上看时,我不确定如何实现这一目标。 我们将不胜感激。
答案 0 :(得分:3)
List cats = sess.createCriteria(Cat.class)
.add( Restrictions.like("name", "Fritz%") )
.setFetchMode("mate", FetchMode.EAGER)
.setFetchMode("kittens", FetchMode.EAGER)
.list();
这将检索一个名为Fritz%的猫的列表,并且已经加载了它们的配偶引用,并且它们的小猫集合也已经加载。
应该尝试使用类似的东西来检查生成的sql,看看它是否正在对引用进行外连接,并将fetch更多设置为Eager。