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

  • 相关阅读:
    firewall详解
    Fiddler使用
    Asp.net Core过滤器
    单例模式
    C# 收银机顾显(客显)及打印小票(58热敏打印机)
    sqlite批量处理数据性能优化
    sqlite 插入数据 too many variables
    winform textbox控件keydown、keypress、keyup简单介绍
    ie兼容placeholder效果
    asp.net mvc全局异常捕获
  • 原文地址:https://www.cnblogs.com/muhy/p/11801794.html
Copyright © 2011-2022 走看看