2012-09-11 29 views
0

我有要求在哪里我想在HQL查询中创建一个新的对象。并且在新的Object构造函数中提供的参数之一是其他一些对象的列表。HQL新列表(...)在新的对象(..)

例如:

选择新Object1(a.id,新列表(选择B,从表2为B WHERE b.id> 0))FROM表1 AS一个;

所以我会得到一个Object1类型的对象,它具有从另一个表中检索的列表。

请你帮帮忙..

+0

这是不可能的。 HQL中的新语法是针对边缘情况的 - 它不是一种完整的编程语言。尝试这样的事情通常表明您正在尝试将Hibernate用于不适合的事情。 – gkamal

回答

0

你不能这样做在一个声明中,你打算。用不同的方式思考。有一些可能性。

  1. 您创建Object1到table1和Object2到table2的映射。在Object1的映射中,您创建了一个与Object2的一对多关系,并且此关系包含您选择的where条件"WHERE Object2.id>0"。那么你只需要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()这在第一次调用加载从表2的元素列表。