У меня есть вызов объекта Student с несколькими полями, связанными со студентом, и список Subject с отношением oneToMany. Здесь мне нужно получить все поля, включая Список объектов, кроме «изображения», так как он использует больше памяти, для получения всех строк требуется много времени. Может ли кто-нибудь сказать, как создать проекцию и критерии для извлечения этого объекта 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 (" subject "))' –
Добавленный код, о котором идет речь. Я вижу объект Student, но все поля имеют нулевое значение. Это что-то, чего я не вижу? – Mohan