Ésta es una muestra de la primavera de datos, sin embargo sus obras de la misma manera en 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);
Entonces , Llamo a este método e imprimo los resultados:
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);
}
La salida @test está aquí:
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 ]
Saludos
@ John: Además, puede invocar constructores de HQL, por lo que podría también qué 'select new Foo (O1, O2, o3) ... 'y obtenga una lista en lugar de una lista
Ok, pero ¿y si quiero usar un JPA TypedQuery: myEntityManager.createQuery ("seleccionar o1, o2 ...", <¿qué poner aquí?>) – AgostinoX
¿Qué pasaría si quisiera usar setFirstResult que realmente se aplicaría al concatenación de ambas listas? es decir, quiero poder devolver una lista paginada que es la concatenación del resultado para las dos entidades consultadas. – Thomas