我需要通過HQL從DB加載對象的集合,目的是使用這些對象僅用於在某些新記錄中設置關聯。延遲加載對象集合以插入HQL
請考慮以下事項:我需要發送一封電子郵件給所有學分> 50的學分,我需要保留傳輸中包含的所有收件人的跟蹤。
首先選擇學生:
Query query = sessionFactory.getCurrentSession().createQuery("from Student student left join fetch student.scores where student.credits>50");
List<Student> students = query.list();
這將返回學生的所有列的列表(非關聯屬性,如姓氏,名字,出生日期...)加載每個記錄。 問題是,當我有很多數據時,上面的查詢非常慢,並且由於大量無用的數據從數據庫傳輸到應用程序服務器而佔用大量內存。 我無法直接在實體中加載所有屬性,因爲這會殺死應用程序的其他區域。
我需要的是一種加載上述集合的方法,只用獲取的id,因爲我使用的對象只是爲關聯中的一些新對象設置它們。我知道這可以輕鬆完成OneToMany關聯,但我怎樣才能做到這一點直接查詢收集?
List<Recipient> emailRecipients = new ArrayList<>();
for(Student student: students){
Recipient rec = new Recipient();
//this is the only usage of the student object
rec.setStudent(student);
...
set other properties for the recipient
sessionFactory.getCurrentSession().save(rec);
}
裏面的收件人,Student對象是設置這樣的:
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "STD_ID", nullable = false)
private Student student;
正如你所看到的,只需要Student對象的ID,但我不知道該怎麼辦它。