私は、studentに関連するフィールドがほとんどなく、oneToMany関係のSubjectのリストを持つエンティティコールを持っています。ここでは、すべての行を取得するのに長い時間がかかる、より多くのメモリを使用するため、「イメージ」以外の件名リストを含むすべてのフィールドを取得する必要があります。画像フィールドだけを使わずにこのStudentオブジェクトを取得するための投影法と基準を作成する方法を言う人がいますか? "AliasToBeanNestedResultTransformer"のようなカスタム結果トランスフォーマがありますか?これは私がOneToMany関係としてSubjectのListを持っている私のシナリオではうまくいきません。第二にHibernate + Projectionとネストされたリストエンティティを持つエンティティの基準
@OneToMany(mappedBy="student", cascade = CascadeType.ALL, orphanRemoval=true)
private List<Subject> subjects;
YES、:あなたはこの修正を行う必要があるでしょうので
@Entity
@Table(name="STUDENT")
public class Student {
@id
private long studentId;
private String name;
private String dob;
private int age;
@Lob
private byte[] image;
@Lob
private byte[] imageTnail;
@OneToMany(mappedBy="subject", cascade = CascadeType.ALL, orphanRemoval=true)
private List<Subject> subjects;
//setter & getter...
}
@Entity
@Table(name="SUBJECT")
public class Subject {
@id
private long subjectId;
private String subjectName;
@ManyToOne
@JoinColumn(name="studentId")
private Student student;
}
編集
List<Student> results = getSession().createCriteria(Student.class)
.setProjection(Projections.projectionList()
.add(Property.forName("studentId"))
.add(Property.forName("name"))
.add(Property.forName("dob"))
.add(Property.forName("age"))
).setResultTransformer(Transformers.aliasToBean(Student.class)).list();
System.out.println("StudentDaoImpl.getStudents()"+results.get(0).getName());
これは動作しますが、私がnullなどの科目を取得しています。私はすべての科目を各生徒に関連付けるべきです。 – Mohan
あなたの投影に追加する必要があります: '.add(Property.forName(" subjects "))' –
上記のコードを追加しました。私は生徒オブジェクトが返されたのを見ていますが、すべてのフィールドにはnull値があります。それは私が行方不明であるか? – Mohan