• 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

  • 相关阅读:
    node-log4js3.0.6配置
    MySQL命令学习
    64位 windows10,MYSQL8.0.13重置密码(忘记密码或者无法登录)
    64位 windows10,安装配置MYSQL8.0.13
    vscode切换界面布局
    一个网站同时监听两个端口
    javascript +new Date()
    es6 解构
    react列表数据显示
    访问禁止,检测到可疑访问,事件编号
  • 原文地址:https://www.cnblogs.com/muhy/p/11801794.html
Copyright © 2020-2023  润新知