我有一个类似的pojo:
StudentResultPojo{
studentId;
studentName;
studentEmail;
List<CourseResultPojo> coursePojoList;
}
CourseResultPojo 看起来像这样:
CourseResultPojo{
name;
teacher;
time;
teacherPhone;
teacherEmail;
}
我有学生、课程、教师、电话、电子邮件等的休眠实体(数据库:Postgres)。
这是我的一段代码:
String query = "SELECT
distinct student.id as \"studentId\",
student.name as \"studentName\",
student.email as \"studentEmail\"
FROM
sample.sample_Student student";
Query q = entityManager.unwrap(Session.class).
createSQLQuery(query).
setResultTransformer(Transformers.aliasToBean(StudentResultPojo.class));
return q.list();
我想将查询保留在 NativeSQL 中,而不是 JPQL 中。编辑:因为查询可以随时更改。我想将查询存储在数据库中并根据需要进行编辑。如果在本机查询中,测试会更容易。
我知道 JPQL 具有类似的功能,我们可以通过它的构造函数将 JPA 查询的结果转换为 pojo,例如 select new (Pojo.class.getName()....) ,但这与我面临的问题相同。
有了我所拥有的,我将不得不遍历我的服务返回的 StudentResultPojo 列表,并且我必须通过从数据库中检索数据或通过导航它们的 Hibernate 关系在 Java 代码中为每个 StudentResultPojo 填充 coursePojoList,这需要一些时间时间。
实体看起来像:
Student{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", unique = true, nullable = false)
private Long id;
private String name;
@OneToMany(fetch = FetchType.LAZY, mappedBy = "student")
private Set<Course> courses = new HashSet<>(0);
}
Course{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", unique = true, nullable = false)
private Long id;
private String name;
private String time;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "student_id", referencedColumnName = "pk")
@ForeignKey(name = "student_course")
private Student student;
@OneToOne(fetch = FetchType.LAZY, mappedBy = "course")
private Set<Teacher> teacher;
}
......
问题:如果我有一个以 2 行返回结果的查询(不是 JSON,只是运行查询时返回的结果)
1, James, james.t@yahoo.com, Physics, Albert, 9.00, 7887897899, physics.teacher@yahoo.com
1, James, james.t@yahoo.com, English, Jackie, 10.00, 7887097899, english.teacher@yahoo.com
有没有办法可以将结果转换为带有 CourseResultPojos 列表的单个 StudentResultPojo?
这意味着我的 StudentResultPojo 的属性值为
1, James, james.t@yahoo.com for id, name and email respectively
并且列表将有两个 CourseResultPojo 对象
1st Object values as Physics, Albert, 9.00, 7887897899, physics.teacher@yahoo.com for attributes name, teacher, time,teacherPhone,teacherEmail
2nd Object values as English, Jackie, 10.00, 7887097899, english.teacher@yahoo.com for attributes name,teacher,time,teacherPhone,teacherEmail
谢谢你。