私はこれに似た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();
JPQLではなく、NativeSQLでクエリを保持したいと思います。編集:クエリはいつでも変更できるためです。クエリをデータベースに保存し、必要に応じて編集したいと思います。ネイティブ クエリにすると、テストが容易になります。
JPQLには、 select new (Pojo.class.getName()....) のようなコンストラクターを介してJPAクエリからの結果をpojoに変換できる同様の機能があることを知っていますが、それには私が直面している同じ問題があります。
私が持っているものでは、サービスが返す 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
リストには 2 つの 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
ありがとうございました。