2010-12-17 145 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