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