如何解決Hibernate 在迭代關係時出現「無法延遲初始化集合」異常
嘗試從以下位置存取集合時會出現此問題目前會話中尚未完全初始化的實體。在這種情況下,在初始查詢期間不會檢索「主題」實體的「評論」集合,從而導致 Hibernate 異常。
要解決此問題,需要了解集合是透過以下方式延遲載入的:預設為休眠狀態。這意味著它們的元素不是在檢索父實體時急切獲取的,而是在實際存取它們時獲取的。
要急切載入「comments」集合,請將「Topic」模型中的欄位對應更新為:
@OneToMany(fetch = FetchType.EAGER, mappedBy = "topic", cascade = CascadeType.ALL) private Collection<Comment> comments = new LinkedHashSet<>();
透過將取得策略設為FetchType.EAGER,Hibernate 將在初始查詢期間明確取得「comments」集合,確保存取「topicById」實例時,所有元素都可用。
此外,請考慮增加會話逾時以適應長時間運行的操作,或使用 @OpenSessionInView 註解來確保 Hibernate 會話在 JSP 視圖渲染期間保持開啟狀態。
以上是如何修復 Hibernate 的「無法延遲初始化集合」異常?的詳細內容。更多資訊請關注PHP中文網其他相關文章!