本机查询 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所有Students
从Student
table。
换句话说,我想收集 ArrayList<Student>
中的所有 Students
,他们在给定的 Course
.
中
问题是,在这样做之后,ArrayList<T>
包含来自类型 java.lang.Object
的元素,而不是我的自定义类型 Student
。
System.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();
我的 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所有Students
从Student
table。
换句话说,我想收集 ArrayList<Student>
中的所有 Students
,他们在给定的 Course
.
问题是,在这样做之后,ArrayList<T>
包含来自类型 java.lang.Object
的元素,而不是我的自定义类型 Student
。
System.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();