我有一个类似的pojo:
StudentResultPojo{
studentId;
studentName;
studentEmail;
List<CourseResultPojo> coursePojoList;
}
CourseResultPojo看起来像这样:
CourseResultPojo{
name;
teacher;
time;
teacherPhone;
teacherEmail;
}
我有学生,课程,教师,电话,电子邮件等的Hibernate实体(数据库: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。 编辑:因为查询可以随时更改。我想将查询存储在数据库中并根据需要进行编辑。如果它在Native查询中将更容易进行测试。
我知道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
谢谢。
答案 0 :(得分:0)
我想我会尽力帮助您提供帮助:StudentResultPojo
和CourseResultPojo
你可以做些什么来实现JSON Stris为2个对象创建一个包装类(即StudentCoursePojo
):
Public class StudentCoursePojo {
private StudentResultPojo student;
private List<CourseResultPojo> courses;
// ...getters and setters
}
如果您希望List
StudentCoursePojo
作为JSON字符串,请猜猜是什么?您还可以为它创建一个包装器:
Public class StudentCourseList {
private List<StudentCoursePojo > studentCourses;
// ...getters and setters
}
然后,您可以使用Jackson
或GSON
将StudentCoursePojo
或StudentCourseList
序列化为JSON。
一些有用的教程:
How to use the managed client for Azure Mobile Apps
http://www.mkyong.com/java/jackson-2-convert-java-object-to-from-json/
希望这会有所帮助。
修改强>
由于您的StudentResultPojo
已包含CourseResultPojo
,因此您只需构建此对象,然后为List
StudentResultPojo
创建一个包装器。然后使用上述选项序列化为JSON。