クエリに次のような1つのクラスが含まれる場合:
query = session.createQuery("select u from User as u");
queryResult = query.list();
繰り返します。queryResult
はUser
クラスのオブジェクトです。
では、複数のクラスを含むクエリから結果を取得する方法は?例えば:
select u, g from User as u, Group as g where u.groupId = g.groupId and g.groupId = 1
for (Object[] result : query.list()) {
User user = (User) result[0];
Group group = (Group) result[1];
}
私は信じているタプルを使用してそれを行うことができますが、より重要なことは、グループとユーザーがそのクエリのように関連している場合、ユーザーはグループフィールドを持つ必要があることを示唆しているようです)。その場合は、_select u from User u join fetch u.group g where g.groupId = :id
_を使用してクエリを実行できます(その後、query.setParameter(1, id);
を使用してIDを設定します。
そのクエリのfetch
キーワードにより、負荷が大きくなるため、両方のオブジェクトがhibernateに返され、Userオブジェクトが返されます。 user.getGroup()を使用してGroupオブジェクトにアクセスします。
単一のエンティティを選択すると、query.list()
は、エンティティを含むList
のObject
を返します。
複数のエンティティを選択すると、query.list()
はObject[]
のList
を返します。配列の各要素は、個別のエンティティを表します。
詳細はこちら: http://docs.jboss.org/hibernate/core/3.3/reference/en/html/queryhql.html#queryhql-select
また、コンストラクタを作成してオブジェクトを返すこともできます。
クラスファミリに適切なコンストラクタがあると仮定します-実際のタイプセーフJavaオブジェクトとして:
select new Family(mother, mate, offspr)
from DomesticCat as mother
join mother.mate as mate
left join mother.kittens as offspr
またはリスト:
select new list(mother, offspr, mate.name)
from DomesticCat as mother
inner join mother.mate as mate
left outer join mother.kittens as offspr
http://docs.jboss.org/hibernate/core/3.3/reference/en/html/queryhql.html#queryhql-select