JPA:返回多个实体的查询
我正在编写一个跨三个表联接的 JPQL 查询。在我的结果列表中,我想获得每个匹配行的所有三个实体(希望这有意义)。
有什么想法吗?
Hibernate 3.x是我的JPA提供者。
我正在编写一个跨三个表联接的 JPQL 查询。在我的结果列表中,我想获得每个匹配行的所有三个实体(希望这有意义)。
有什么想法吗?
Hibernate 3.x是我的JPA提供者。
IIRC,你可以做一个,结果将是一个,其中数组内容将包含o1,o2,o3值。SELECT o1, o2, o3 FROM EntityA o1, EntityB o2, EntityC o3 WHERE ....
List<Object[3]>
这是一个 Spring Data 示例,但它在 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);
然后,我调用此方法并打印结果:
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);
}
输出@Test如下:
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 ]
干杯