2010-12-15 16 views
3

我似乎還沒有找到一個答案,財產以後,我拒絕接受爲「不可以」 :)有許多到一個集合中選擇新建()構造函數中 - HQL

這裏是我的HQL查詢:「SELECT new TestTable(t.id,t.param1,t.param2,t.param3,stps)FROM TestTable t left join t.steps as stps WHERE t.someObj.id IN(:someObjIds)」

TestTable的有以下consturtor:公共TestTable的(整數參數1,整型參數2,日期參數3,日期param4,設置步驟)

我試圖在構造函數中,而不是設置爲使用集合,但它沒有工作,構造會我只收到集合中的第一個項目作爲參數,而不是我期望的整個集合。

查詢

我還試圖用LEFT JOIN取t.steps,嘗試沒有LEFT JOIN可言,試圖圍繞在構造函數中的「污水處理廠」參數與「元素」是這樣的:元素(污水處理廠)

但沒有任何工作...我這樣做的原因是因爲TestTable非常大,有很多列和assosiations,但在這種情況下,我只想要4列和一個集合。當一個查詢可以返回多達400,000個對象時,這就變得不必要了。

任何想法任何人? (順便說一句,我的名字是Tomer)

+1

請格式化右側編輯提示的代碼 – bluish 2010-12-15 08:42:12

+1

我不明白你想要什麼。 – Bozho 2010-12-15 09:19:56

回答

4

您的查詢可能沒有'新'的構造函數,但它不會給你你所期望的。

此查詢返回每行的t.id,t.param1,t.param2,t.param3,[步驟表中的一個實體] ,並且由於左連接到步驟表而複製結果。

我的建議是,首先創建一個從TestTable獲取數據的查詢。 喜歡的東西

List<TestTable> resultList = "select new TestTable(t.id,t.param1,t.param2,t.param3) from TestTable where 
         t.someObj.id in (:someObjId)" 

然後,創建步驟表中的每個TestTable的獲取數據的查詢。

for (TestTable tt : resultList) { 
    List<Steps> stepList = "select st from Steps st where st.testTable.id = :ttId"; 
    tt.setSteps(stepList); 
} 
2

不能在構造函數表達式中使用集合值路徑表達式。請按照answer

相關問題