如果你是開放的使用Hibernate特有的註解,你可以做到以下幾點:
class Quiz {
@LazyCollection(LazyCollectionOption.EXTRA)
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "quiz", orphanRemoval = true)
private Set<Question> questions;
}
注意使用@LazyCollection(LazyCollectionOption.EXTRA)
。
現在,如果你這樣做了quizRepsitory.findOne(...).getQuestions().size()
,Hibernate將激發查詢SELECT COUNT(...) FROM question WHERE quiz_id=?
。但是,如果你做for(Question question : quizRepsitory.findOne(...).getQuestions()) { ... }
,Hibernate將激發一個不同的查詢:SELECT * FROM question WHERE quiz_id=?
。此外,如果quiz.questions
已經加載,則COUNT
查詢不會再次被觸發。保存你必須映射Quiz
到Question
兩次,一次爲實際收集和再次爲計數。
謝謝。我以前不知道@Formula。但是我已經找到了很好的解決方案。 @LazyCollection(LazyCollectionOption.EXTRA) 私人列表問題; 休眠不加載所有相關的問題,只有大小。 –
是的,你是對的。這可能是最好的解決方案:忘了那個休眠選項! –