web-dev-qa-db-ja.com

Hibernate:複数のクラスを含むクエリから結果を取得する方法

クエリに次のような1つのクラスが含まれる場合:

query = session.createQuery("select u from User as u");
queryResult = query.list();

繰り返します。queryResultUserクラスのオブジェクトです。

では、複数のクラスを含むクエリから結果を取得する方法は?例えば:

select u, g from User as u, Group as g where u.groupId = g.groupId and g.groupId = 1
25
yaya
for (Object[] result : query.list()) {
    User user = (User) result[0];
    Group group = (Group) result[1];
}
28
PonomarevMM

私は信じているタプルを使用してそれを行うことができますが、より重要なことは、グループとユーザーがそのクエリのように関連している場合、ユーザーはグループフィールドを持つ必要があることを示唆しているようです)。その場合は、_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オブジェクトにアクセスします。

6
Thor84no

単一のエンティティを選択すると、query.list()は、エンティティを含むListObjectを返します。

複数のエンティティを選択すると、query.list()Object[]Listを返します。配列の各要素は、個別のエンティティを表します。

詳細はこちら: http://docs.jboss.org/hibernate/core/3.3/reference/en/html/queryhql.html#queryhql-select

4
Luka Klepec

また、コンストラクタを作成してオブジェクトを返すこともできます。

クラスファミリに適切なコンストラクタがあると仮定します-実際のタイプセーフ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

0
Jason Glez