Hibernate lazy load data exception when hibernate session be auto closed

question background

當我修改完了所有的獲取 hibernate 的獲取 session 的方法的時候。啓動都沒有問題。但是在某些功能使用到了hibernate 的一對多的時候。把數據庫查詢的結果輸出到界面時發生異常。就想不使用懶加載了。

failed to lazily initialize a collection of role: com.youcompanydomain.auto.entity.user.roles, no session or session was closed

實體類配置如下

@OneToMany(fetch = FetchType.LAZY,mappedBy="role_id",targetEntity = Roles.class, cascade = {CascadeType.REFRESH, CascadeType.MERGE})
private List<Role> roles;

其中 @OneToMay 使用的是 JPA 規範的註解。

solution

進過一系列的百度。總結如下:
1. 將配置改成 fetch 改成 FetchType.EAGER。無果,啓動的時候循環加載了配置文件,沒有拋出錯誤。(循環加載原因未知,開啓了 debug 日誌都沒有錯誤輸出)
2. 在 get/set 方法加上 @Lazy(false)。無果。沒有效果,還是之前的錯誤

reflect on

  1. 將註解修改成 xml 的方式。可以啓動成功。
  2. 觀察發現 hibernate 也有相關的 lazy 的註解,偶然發現
@LazyToOne(LazyToOneOption.FALSE)
@LazyCollection(LazyCollectionOption.FALSE)

這2種寫法都阻止掉懶加載了。

文章出自 http://blog.wordty.cn

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章