我有一個實體調用學生,其中包含與學生相關的幾個字段以及具有一對多關係的主題列表。在這裏,我需要獲取除「圖像」之外的所有字段,包括主題列表,因爲它使用更多的內存,需要很長時間才能檢索所有行。有人可以說如何創建Projection和條件來檢索這個沒有圖像字段的Student對象嗎?是否有像「AliasToBeanNestedResultTransformer」這樣的自定義結果轉換器?因爲這不適用於我的主題列表爲OneToMany關係的場景。Hibenrate +使用嵌套列表實體的投影和實體標準
@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());
這工作,但我得到科目爲空。我應該把與每個學生相關的所有科目都拿來。 – Mohan
所以你必須將它添加到你的投影中:'.add(Property.forName(「subjects」))' –
添加了上述代碼。我看到學生對象返回,但所有的字段都有空值。那是我缺少的東西嗎? – Mohan