org.hibernate.LazyInitializationException異常解決辦法


org.hibernate.LazyInitializationException異常
failed to lazily initialize a collection...的解決方案
使用hibernate從一方獲取多方信息的時候發生

org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.haowei.carmanager.model

這個異常與hibernate加載關聯對象的2種方式有關,一個是懶加載方式,一個是立即加載方式.

一. 原先的配置
1. 一方中的多方:
@OneToMany(mappedBy = "carFirm",cascade = CascadeType.ALL,fetch = FetchType.LAZY)
private Set<CarBrandType> brandTypeSet;//汽車廠商與汽車品牌為一對多的關系
2. 多方中的一方
@ManyToOne(cascade = CascadeType.ALL,optional = false)
@JoinColumn(name="brandid",referencedColumnName = "carfirm_id")
private CarFirm carFirm; //汽車廠商與汽車品牌為一對多的關系
注意在多方中的一方的配置沒有指定加載方式,而且一方中的多方是懶加載,因此在獲取一方的時候一方是獲取到了,但是再獲取多方的時候session已經關閉了,這時候會獲取不到多方信息,因此報錯.

二. 解決方式
1. 一方中的多方
@OneToMany(mappedBy = "carFirm",cascade = CascadeType.ALL,fetch = FetchType.EAGER)
private Set<CarBrandType> brandTypeSet;//汽車廠商與汽車品牌為一對多的關系
2. 多方中的一方
@ManyToOne(cascade = CascadeType.ALL,optional = false,fetch = FetchType.LAZY)
@JoinColumn(name="brandid",referencedColumnName = "carfirm_id")
private CarFirm carFirm; //汽車廠商與汽車品牌為一對多的關系
就是將一對多中的多方的加載方式改為立刻加載,而一對多中的一方改為懶加載即可.
————————————————
版權聲明:本文為CSDN博主「孫一一」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/syc000666/article/details/94985615


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM