您当前的位置: 首页 >  hibernate

一一哥Sun

暂无认证

  • 3浏览

    0关注

    622博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

org.hibernate.LazyInitializationException异常解决办法

一一哥Sun 发布时间:2019-07-07 13:55:51 ,浏览量:3

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 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 brandTypeSet;//汽车厂商与汽车品牌为一对多的关系
2. 多方中的一方
@ManyToOne(cascade = CascadeType.ALL,optional = false,fetch = FetchType.LAZY)
@JoinColumn(name="brandid",referencedColumnName = "carfirm_id")
private CarFirm carFirm;     //汽车厂商与汽车品牌为一对多的关系

就是将一对多中的多方的加载方式改为立刻加载,而一对多中的一方改为懒加载即可.

 

关注
打赏
1665624836
查看更多评论
立即登录/注册

微信扫码登录

0.1336s