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

相关问题