33

If my query contains one class, like:

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

then I iterate it, where queryResult is an object of User class.

So how to get result from query which contains more than one class? For example:

select u, g from User as u, Group as g where u.groupId = g.groupId and g.groupId = 1
1

5 Answers 5

34
for (Object[] result : query.list()) {
    User user = (User) result[0];
    Group group = (Group) result[1];
}
Sign up to request clarification or add additional context in comments.

Comments

7

You can do that using Tuples I believe, but more importantly, if your Group and User is related like that query seems to suggest User should have a Group field (don't use groupId in your User class, hibernate should sort this out for you). If that's the case you can simply query it using select u from User u join fetch u.group g where g.groupId = :id (then set the id using query.setParameter(1, id);.

The fetch keyword in that query makes it an eager load so both objects will be returned to hibernate which will return the User object to you. Access the Group object using user.getGroup().

2 Comments

I think that this is right way, but i had some parser errors: expecting "all", found 'join' and expecting "by", found 'where'
It's join fetch rather than fetch join, my mistake. Correcting it now.
6

When you select a single entity, query.list() will return a List of Object containing your entities.

When you select multiple entities, query.list() will return a List of Object[]. Each element of the array represents a separate entity.

Read more here: http://docs.jboss.org/hibernate/core/3.3/reference/en/html/queryhql.html#queryhql-select

Comments

0

Also you can create a constructor and return a object:

Assuming that the class Family has an appropriate constructor - as an actual typesafe Java object:

select new Family(mother, mate, offspr)
from DomesticCat as mother
join mother.mate as mate
left join mother.kittens as offspr

Or a list:

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

Comments

0

If casting the query.list() to Object[] does not work. You can first cast it to an Object and then cast that Object to Object[] like this

for (Object r: query.list()) {
        Object[] r1 = (Object[]) r;
        User user = (User) result[0];
        Group group = (Group) result[1];
     }

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.