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

  • 相关阅读:
    日志规范实践
    序列化和反序列化及Protobuf 基本使用
    简述TCP网络编程本质
    笔记:多线程服务器的适用场合(1)
    聊聊同步、异步、阻塞与非阻塞(转)
    《EntrePreneur》发刊词
    make和makefile简明基础
    luogu P3687 [ZJOI2017]仙人掌 |树形dp
    luogu P3172 [CQOI2015]选数 |容斥原理
    luogu P4513 小白逛公园 |线段树
  • 原文地址:https://www.cnblogs.com/muhy/p/11801794.html
Copyright © 2011-2022 走看看