欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

failed to lazily initialize a collection of role 异常

程序员文章站 2022-04-11 16:51:22
...

最近在通过配置实体类的方式,正向自动扫描注解方式配置的hibernate类文件来生成数据库的方法搭建环境,遇到了许多问题。

通过数据库配置hibernate的时候,大家都知道是在实体类对应生成的.hbm.xml文件中查看一对多和多对多的关系。

当报failed to lazily initialize a collection of role异常的时候,往往是因为懒加载的问题导致的。

可以在.hbm.xml文件中,将lazy=“false”,这样就不会报这个异常了。

但是在自动扫描注解方式配置的hibernate类文件时,如何将懒加载改为false呢?

只需要一句话,在注解上添加fetch=FetchType.EAGER便可

@OneToMany(mappedBy="user",fetch=FetchType.EAGER)

举个例子:

package com.maya.entity;

import java.util.ArrayList;
import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;

import org.hibernate.annotations.GenericGenerator;
import org.springframework.context.annotation.Lazy;

@Entity
@Table(name="t_user")

public class User {

    private Integer id;
    private String password;
    private String ename;
    private String sex;
    //private String dept;
    //private Dept dept;
    private String tel;
    private String description;
    
    private List<WarehouseMain> warehouseMainList=new ArrayList<WarehouseMain>();
    private List<ReWarehouseMain> reWarehouseMainList=new ArrayList<ReWarehouseMain>();
    private List<SellMain> sellMainList=new ArrayList<SellMain>();
    private List<ReSellMain> reSellMainList=new ArrayList<ReSellMain>();
    
    @Id
    @GenericGenerator(name = "generator", strategy = "native")
    @GeneratedValue(generator = "generator")
    @Column(name = "id", length=11)
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    @Column(name = "password", length = 20)
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    @Column(name = "ename", length = 20)
    public String getEname() {
        return ename;
    }
    
    public void setEname(String ename) {
        this.ename = ename;
    }
    @Column(name = "sex", length = 10)
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
    /*
    @ManyToOne
    @JoinColumn(name="dept_id")
    public Dept getDept() {
        return dept;
    }
    public void setDept(Dept dept) {
        this.dept = dept;
    }*/
    @Column(name = "tel", length = 20)
    public String getTel() {
        return tel;
    }
    public void setTel(String tel) {
        this.tel = tel;
    }
    @Column(name = "description", length = 100)
    public String getDescription() {
        return description;
    }
    public void setDescription(String description) {
        this.description = description;
    }
    @OneToMany(mappedBy="user",fetch=FetchType.EAGER)
    public List<WarehouseMain> getWarehouseMainList() {
        return warehouseMainList;
    }
    public void setWarehouseMainList(List<WarehouseMain> warehouseMainList) {
        this.warehouseMainList = warehouseMainList;
    }
    @OneToMany(mappedBy="user",fetch=FetchType.EAGER)
    public List<ReWarehouseMain> getReWarehouseMainList() {
        return reWarehouseMainList;
    }
    public void setReWarehouseMainList(List<ReWarehouseMain> reWarehouseMainList) {
        this.reWarehouseMainList = reWarehouseMainList;
    }
    @OneToMany(mappedBy="user",fetch=FetchType.EAGER)
    public List<SellMain> getSellMainList() {
        return sellMainList;
    }
    public void setSellMainList(List<SellMain> sellMainList) {
        this.sellMainList = sellMainList;
    }
    @OneToMany(mappedBy="user",fetch=FetchType.EAGER)
    public List<ReSellMain> getReSellMainList() {
        return reSellMainList;
    }
    public void setReSellMainList(List<ReSellMain> reSellMainList) {
        this.reSellMainList = reSellMainList;
    }
    
    
}