我的MySQL数据库中有以下表格:
Student
id | firstName | lastName | ...
Course
id | name | cp | ...
-
CourseResult (course_id and student_id are created by JPA)
id | course_id | student_id | grade | ...
-
我正在尝试处理由Students
定义的Course
中的所有course_id
人。为此,我在我的控制器中创建了一个方法:
public String showCourseResultList(Course course) {
this.course = course;
studentsInCourse = new ArrayList<Student>();
studentsInCourse = em
.createNativeQuery(
"SELECT * FROM Student WHERE id IN (SELECT student_id FROM CourseResult WHERE course_id = ?)")
.setParameter(1, course.getId()).getResultList();
System.out.println(studentsInCourse);
return "courseResultList?faces-redirect=true";
}
因此,在NativeQuery中,我检测到给定student_ids
的所有course_id
。然后,我使用student_ids
从Students
表中选择所有Student
。
换句话说,我想收集Students
中所有ArrayList<Student>
的所有Course
。
问题是,在执行此操作后,ArrayList<T>
包含java.lang.Object
类型的元素,而不是我的自定义类型Student
。
System.out.println(studentsInCourse);
会返回[[Ljava.lang.Object;@3adaf419, [Ljava.lang.Object;@7ccfb37e]
。
如何从Students
而不是Student
收集ArrayList<T>
类型的所有ArrayList<java.lang.Object>
?
答案 0 :(得分:2)
尝试将您期望的类名作为createNativeQuery调用的第二个参数:
studentsInCourse = em
.createNativeQuery(
"SELECT * FROM Student WHERE id IN (SELECT student_id FROM CourseResult WHERE course_id = ?)", Student.class)
.setParameter(1, course.getId()).getResultList();