Native Query在JPA应用程序中使用java.lang.Object而不是自定义对象类型返回列表

时间:2015-01-15 12:47:07

标签: java mysql jpa type-conversion

我的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_idsStudents表中选择所有Student。 换句话说,我想收集Students中所有ArrayList<Student>的所有Course

问题是,在执行此操作后,ArrayList<T>包含java.lang.Object类型的元素,而不是我的自定义类型StudentSystem.out.println(studentsInCourse);会返回[[Ljava.lang.Object;@3adaf419, [Ljava.lang.Object;@7ccfb37e]

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

1 个答案:

答案 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();