0

私はこれに似た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

ありがとうございました。

4

1 に答える 1

0

私はあなたが持っているものを手伝おうと思いますStudentResultPojo:CourseResultPojo

そのJSON Strisを達成して2つのオブジェクトのラッパークラスを作成するためにできること(つまりStudentCoursePojo):

Public class StudentCoursePojo {
   private StudentResultPojo student;
   private List<CourseResultPojo> courses;
   // ...getters and setters
} 

ListJSON 文字列としてofが必要な場合はStudentCoursePojo、何を推測しますか? それにラッパーを作成することもできます。

    Public class StudentCourseList {
        private List<StudentCoursePojo > studentCourses;
         // ...getters and setters
    } 

次に、or を使用して orJacksonをJSONGSONにシリアル化できます。StudentCoursePojoStudentCourseList

いくつかの便利なチュートリアル:

http://www.mkyong.com/java/jackson-2-convert-java-object-to-from-json/

http://www.mkyong.com/java/how-do-convert-java-object-to-from-json-format-gson-api/

お役に立てれば。

編集:

StudentResultPojoは既に が含まれているためCourseResultPojo、このオブジェクトをビルドしてから のラッパーを作成するだけListですStudentResultPojo。次に、上記のオプションを使用して JSON にシリアル化します。

于 2016-05-19T02:38:21.613 に答える