我有一个要求,我想在 HQL 查询中创建一个新对象。在 new Object 构造函数中要提供的参数之一是一些其他对象的列表。
例如:
SELECT new Object1(a.id, new List(SELECT b FROM table2 AS b WHERE b.id>0)) FROM table1 AS a;
所以我会得到一个 Object1 类型的对象,它有一个从另一个表中检索到的列表。
请帮忙..
你不能像你计划的那样在一个声明中做到这一点。换一种方式思考。有一些可能性。
创建 Object1 到 table1 和 Object2 到 table2 的映射。在 Object1 的映射中,您创建与 Object2 的一对多关系,该关系包含"WHERE Object2.id>0"
您选择的 where 条件。那么你只需要 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 中的元素列表。