2011-02-11 54 views
2

我使用Hibernate選擇一個數字(x)的實體Foo。每個foo都有一對多的集合條和baz,它們被設置爲延遲獲取。我需要爲每個foo填充bar和baz,所以我絕對不希望每個集合都發佈一個子查詢(2 * x + 1個選擇)。使用兩個一對多集合來查詢一個hibernate實體

但是,我也不一定要setFetchMode(FetchMode.JOIN),因爲這將返回笛卡爾積(bar x baz)。另外,如果我將foo和bar定義爲列表,我將收到重複的項目。我可以發佈兩個條件:

List<Foo> foos; 
foo = session.createCriteria(Foo.class).setFetchMode("bar", FetchMode.JOIN).list(); 
foo = session.createCriteria(Foo.class).setFetchMode("baz", FetchMode.JOIN).list(); 

但代碼看起來相當sl。。它看起來像第一個查詢是不必要的。有沒有更好的方法來獲取酒吧和巴茲?

回答

1

我想轉儲標準並使用HQL來做到這一點。

String hql = "select new list(foo.bar, foo.baz) from Foo foo"; 
Query query = session.createQuery(hql); 
List list = query.list; 
Bar bar = list.get(0); 
Baz baz = list.get(1); 

http://docs.jboss.org/hibernate/core/3.3/reference/en/html/queryhql.html

+0

什麼是富有其他成員(非集合),我想?你會單獨選擇它們嗎? – schmmd 2011-02-11 19:30:02

相關問題