本机查询 returns 列表 java.lang.Object 而不是 JPA 应用程序中的自定义对象类型

Native Query returns list with java.lang.Object instead of custom object type in JPA application

我的 MySQL 数据库中有以下 table:

Student
id | firstName | lastName | ...

Course
id | name | cp | ...
-

CourseResult (course_id and student_id are created by JPA)
id | course_id | student_id | grade | ...
-

我正在尝试与给定 course_id 定义的 Course 中的所有 Students 一起工作。为此,我在我的控制器中创建了一个方法:

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 中,我正在检测给定 course_id 的所有 student_ids。然后我用student_ids到select所有StudentsStudenttable。 换句话说,我想收集 ArrayList<Student> 中的所有 Students,他们在给定的 Course.

问题是,在这样做之后,ArrayList<T> 包含来自类型 java.lang.Object 的元素,而不是我的自定义类型 StudentSystem.out.println(studentsInCourse); returns [[Ljava.lang.Object;@3adaf419, [Ljava.lang.Object;@7ccfb37e].

如何在我的 ArrayList<T> 中收集类型 Student 的所有 Students 而不是 ArrayList<java.lang.Object>

尝试将您期望的类名作为 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();