我要求在HQL查询中创建新对象的位置。并且在新的Object构造函数中提供的参数之一是一些其他对象的列表。
例如:
SELECT new Object1(a.id,new List(SELECT b FROM table2 AS b WHERE b.id> 0))FROM table1 AS a;
所以我会得到一个Object1类型的对象,它有一个从另一个表中检索的列表。
请帮忙..
答案 0 :(得分:0)
您无法按照计划在一个声明中执行此操作。以不同的方式思考。有一些可能性。
您可以创建Object1到table1和Object2到table2的映射。在Object1的映射中,您创建了与Object2的一对多关系,并且此关系包含select中的where条件"WHERE Object2.id>0"
。那么你只需要HQL语句"from Object1"
这是最好的和最休眠式的可能性,但它只有在where条件总是相同的情况下才有效。然后你需要table1和table2之间的数据库关系(在你的例子中你没有,但可能存在,你只在你的例子中忘记了它)。
或
您只需先加载table1 SELECT new Object1(a.id) FROM Table1 a
,然后在此列表的所有元素的循环中加载第二个表FROM table2 b WHERE b.id>0
并将其放入Object1类型的元素中。
或
您只先加载table1 SELECT new Object1(a.id) FROM Table1 a
,而在Object1中您有一个方法getObject2List()
,在第一次调用时会加载table2中的元素列表。