JPA: Query that returns multiple entities
This is a Spring Data sample, however its works the same way in JPA
//HQL query @Query("SELECT c,l,p,u FROM Course c, Lesson l, Progress p, User u " + "WHERE c.id=l.courseId AND l.id = p.lessonId AND p.userId = u.id AND u.id=:userId AND c.id=:courseId") public List<Object[]> getLessonsWithProgress(@Param("userId") Integer userId, @Param("courseId")Integer courseId);
Then, I call this method and print the results:
List<Object[]> lst = courseRepository.getLessonsWithProgress(userId, courseId);for (Object o[] : lst) { Course c = (Course) o[0]; Lesson l = (Lesson) o[1]; Progress p = (Progress) o[2]; User u = (User) o[3]; //all the classes: Course, Lesson, Progress and User have the toString() overridden with the database ID; System.out.printf("\nUser: %s \n Lesson: %s \n Progress: %s \n Course: %s",u,l,p,c);}
The output @Test is here:
User: com.cassio.dao.model.User[ id=1965 ] Lesson: com.cassio.dao.model.Lesson[ id=109 ] Progress: com.cassio.dao.model.Progress[ id=10652 ] Course: com.cassio.dao.model.Course[ id=30 ]
Cheers
Since You are asking JPA: Query that returns multiple entities
, EclipseLink too comes under it. And I reached on this question googling for EclipseLink. So here is my solution. Hope it works for you.
TypedQuery<Object[]> query = entityManager.createQuery("select p from Post p where p.publisher.pubId= :ID order by p.createdAt desc", Object[].class);query.setParameter("ID", publisherID);
Then you can loop through the result objects and cast them accordingly.
for (Object result : query.getResultList()) { myList.add((Post) result); }
You can also try this,
Query query = entityManager.createQuery("select p from Post p where p.publisher.pubId= :ID order by p.createdAt desc");
Reference:http://wiki.eclipse.org/EclipseLink/UserGuide/JPA/Basic_JPA_Development/Querying/JPQL