zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    Brackets 前端编辑器试用
    java面试题之第一回
    java数据类型
    [转]JAVA标识符和关键字
    Servlet的几个关键知识点
    一个Servlet中可以有多个处理请求的方法
    基于java的聊天室/群发控制台程序
    java 创建string对象机制 字符串缓冲池 字符串拼接机制
    git 常用命令
    ajax axios 下载文件时如何获取进度条 process
  • 原文地址:https://www.cnblogs.com/muhy/p/11801794.html
Copyright © 2011-2022 走看看