org.hibernate.LazyInitializationException: failed to lazily initialize a collection..的解決方案
阿新 • • 發佈:2019-02-03
使用hibernate從一方獲取多方資訊的時候發生:
org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.haowei.carmanager.model。。。。
從網上搜一下大致跟hibernate載入關聯物件的方式有關,一個是懶載入方式,一個是立即載入方式。
原先配置是:
一方中的多方:
@OneToMany(mappedBy = "carFirm",cascade = CascadeType.ALL,fetch = FetchType.LAZY)
private Set<CarBrandType> brandTypeSet; //汽車廠商與汽車品牌為一對多的關係
多方中的一方:
@ManyToOne(cascade = CascadeType.ALL,optional = false)
@JoinColumn(name="brandid",referencedColumnName = "carfirm_id")
private CarFirm carFirm; //汽車廠商與汽車品牌為一對多的關係
注意在多方中的一方的配置沒有指定載入方式,而且一方中的多方是懶載入,因此在獲取一方的時候一方是獲取到了,但是再獲取多方的時候session已經關閉了,這時候會獲取不到多方資訊,因此報錯。
解決方式:
一方中的多方:
@OneToMany(mappedBy = "carFirm",cascade = CascadeType.ALL,fetch = FetchType.EAGER)
private Set<CarBrandType> brandTypeSet; //汽車廠商與汽車品牌為一對多的關係
多方中的一方:
@ManyToOne(cascade = CascadeType.ALL,optional = false,fetch = FetchType.LAZY)
@JoinColumn(name="brandid",referencedColumnName = "carfirm_id" )
private CarFirm carFirm; //汽車廠商與汽車品牌為一對多的關係
就是將一方中的多方的載入方式改為立刻載入,而多方中的一方改為懶載入即可。至於多方中的一方的載入方式是不是也跟該異常有關,這裡就不實驗了。