0

我有一个要求,我想在 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 类型的对象,它有一个从另一个表中检索到的列表。

请帮忙..

4

1 回答 1

0

你不能像你计划的那样在一个声明中做到这一点。换一种方式思考。有一些可能性。

  1. 创建 Object1 到 table1 和 Object2 到 table2 的映射。在 Object1 的映射中,您创建与 Object2 的一对多关系,该关系包含"WHERE Object2.id>0"您选择的 where 条件。那么你只需要 HQL 语句"from Object1"
    这是最好的和最具休眠风格的可能性,但它仅在 where 条件始终相同的情况下才有效。然后您需要 table1 和 table2 之间的数据库关系(您的示例中没有,但可能存在,您只是在示例中忘记了它)。

    或者

  2. 您只需首先加载 table1 SELECT new Object1(a.id) FROM Table1 a,然后在此列表的所有元素上循环加载第二个表FROM table2 b WHERE b.id>0并将其放入 Object1 类型的元素中。

    或者

  3. 您只首先加载 table1 SELECT new Object1(a.id) FROM Table1 a,在 Object1 中您有一个方法,该方法getObject2List()在第一次调用时加载 table2 中的元素列表。

于 2012-09-12T14:32:53.507 回答