背景

Unable to evaluate the expression Method threw ‘org.hibernate.LazyInitializationException’ exception.如何解决?????

使用hibernate从一方获取多方信息的时候发生
这个异常与hibernate加载关联对象的2种方式有关,一个是懒加载方式,一个是立即加载方式.

Unable to evaluate the expression Method threw ‘org.hibernate.LazyInitializationException‘ exceptio_后端

方案

步骤1、

一个颗粒会有多个选项

一个颗粒聚合多个选项的时候加上注解

Unable to evaluate the expression Method threw ‘org.hibernate.LazyInitializationException‘ exceptio_实体类_02

@OneToMany(mappedBy = "contentGrain", cascade = CascadeType.ALL,fetch = FetchType.EAGER, orphanRemoval = true)
    private List<Option> option ;
    @Entity
    private static class Option {

        public Option(){};
}

@OneToMany: 表示一个实体类的一个属性与另一个实体类的多个实例关联。
mappedBy = “contentGrain”: 指定了另一个实体类中与当前属性关联的属性名,也就是当前实体类所拥有的外键属性的名称。这里的 “contentGrain” 是另一个实体类中的属性名。
cascade = CascadeType.ALL: 表示级联操作,当对当前实体类进行增删改操作时,会同时对关联的另一个实体类进行相应的操作,例如删除当前实体类的同时,也会删除关联的另一个实体类。
fetch = FetchType.EAGER: 表示在加载当前实体类时,同时也会加载关联的另一个实体类。(没有写这个是造成没有及时加载的原因)
orphanRemoval = true: 表示如果另一个实体类与当前实体类的关系断开,另一个实体类是否应该自动删除。如果设置为 true,表示应该自动删除;如果设置为 false,表示不应该自动删除。

步骤2:

多的中的外键(对应的是颗粒主键)上的注解:

Unable to evaluate the expression Method threw ‘org.hibernate.LazyInitializationException‘ exceptio_后端_03


Unable to evaluate the expression Method threw ‘org.hibernate.LazyInitializationException‘ exceptio_hibernate_04


Unable to evaluate the expression Method threw ‘org.hibernate.LazyInitializationException‘ exceptio_hibernate_05

// 外键,指向外部类
        @ManyToOne
//        @JoinColumn(name = "outer_id")
        @JoinColumn(name = "outer_id",referencedColumnName = "id")
        private ContentGrain contentGrain;

总结

乱用注解者亡