Ich habe eine Entität aufrufen Student mit wenigen Feldern im Zusammenhang mit Studenten und eine Liste von Subject mit oneToMany Beziehung. Hier muss ich alle Felder einschließlich der Liste der Betreffzeile außer "Bild" abrufen, da es mehr Speicher benötigt, es dauert lange, alle Zeilen abzurufen. Kann jemand sagen, wie man Projektion und Kriterien erstellt, um dieses Student-Objekt ohne Bildfeld alleine zu erhalten? Gibt es benutzerdefinierte Transformatoren wie "AliasToBeanNestedResultTransformer"? Da dies für mein Szenario nicht funktionieren wird, in dem ich eine Liste von Subjekten als OneToMany-Beziehung habe.Hibenrate + Projektion und Kriterien für Entität mit geschachtelter Liste Entität
@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;
}
bearbeiten
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());
Dies funktioniert, aber ich bin Themen als null zu bekommen. Ich sollte jedes Thema mit jedem Schüler verbinden. – Mohan
so müssen Sie es in Ihrer Projektion hinzufügen: '.add (Property.forName (" Themen "))' –
Hinzugefügt oben genannten Code. Ich sehe, dass das Student-Objekt zurückgegeben wird, aber alle Felder haben einen Nullwert. Ist das etwas, was ich vermisse? – Mohan