2010-08-20 64 views
1

假設我有一個:批量加載延遲加載Hibernate屬性的

class Student { 
    int id; 
    String name; 
    List<Course> courses; //Lazily loaded as per Hiberante config 
} 

現在假設我有一個名單的學生,爲了優化所有這些學生獲取名單,我是批量選擇它們,而不是讓Hibernate逐個調用一個單獨的SQL。我無法關閉延遲加載,因爲在許多其他代碼路徑中我不會訪問課程屬性。

我當然可以編寫一個函數,它將取得courseIds列表並返回一個List,然後將這些對象附加到Hibernate會話中,但這些對象將不會與由Hibernate加載的Student對象關聯。如果我調用像student.setCourses()這樣的函數,那麼我會遇到Hibernate會認爲會話很髒的風險,並嘗試更新Student對象。

我真的很想聽聽使用Hibernate時遇到類似問題的人。

回答

1

編寫一個特定的hibernate查詢來讓學生類通過'聯合提取'來獲取單個查詢中的所有相關課程。例如:

from Student s left join fetch s.courses