繁体   English   中英

引起原因:org.hibernate.LazyInitializationException:无法延迟初始化角色集合:

[英]Caused by: org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role:

   package com.ccdm.vo;

import java.util.HashSet;
import java.util.Set;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import static javax.persistence.GenerationType.IDENTITY;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Table;

import com.fasterxml.jackson.annotation.JsonIgnore;

/**
 * ViewModel generated by hbm2java
 */
@Entity
@Table(name = "lb", catalog = "ccdmdb")
public class LoadBal implements java.io.Serializable {

    private static final long serialVersionUID = -767868186084580713L;
    private Integer lbID;
    @JsonIgnore
    private AppUser appUser;
    private ViewModel templates;
    private String lbname;
    private String lbdescription;
    private String lbtype;
    private int clientId;



    public LoadBal() {
    }

    public LoadBal(AppUser appUser, String lbname, String lbdescription, String lbtype, ViewModel templates,
            int clientId) {
        this.appUser = appUser;
        this.lbname = lbname;
        this.lbdescription = lbdescription;
        this.lbtype = lbtype;
        this.templates = templates;
        this.clientId = clientId;
        System.out.println(this.lbname);
        System.out.println(this.lbdescription);
        System.out.println(this.lbtype);
        System.out.println(this.templates);
        System.out.println(this.clientId);
    }



    @Id
    @GeneratedValue(strategy = IDENTITY)

    @Column(name = "LB_ID", unique = true, nullable = false)
    public Integer getlbID() {
        return this.lbID;
    }

    public void setlbID(Integer lbID) {
        this.lbID = lbID;
    }
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "USER_ID", nullable = false)
    public AppUser getAppUser() {
        return this.appUser;
    }

    public void setAppUser(AppUser appUser) {
        this.appUser = appUser;
    }
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "VM_ID", nullable = false)
    public ViewModel getTemplates() {
        System.out.println("here2" + templates);
        return this.templates;
    }

    public void setTemplates(ViewModel VmTemplates) {
        System.out.println("here3" + VmTemplates);
        this.templates= VmTemplates;
    }


    @Column(name = "LB_NAME", nullable = false, length = 100)
    public String getlbname() {
        return this.lbname;
    }

    public void setlbname(String lbname) {
        this.lbname = lbname;
    }
    @Column(name = "LB_DESCRIPTION", nullable = false, length = 100)
    public String getlbdescription() {
        return this.lbdescription;
    }

    public void setlbdescription(String lbdescription) {
        this.lbdescription = lbdescription;
    }
    @Column(name = "LB_TYPE", nullable = false, length = 100)
    public String getlbtype() {
        return this.lbtype;
    }

    public void setlbtype(String lbtype) {
        this.lbtype = lbtype;
    }
    @Column(name = "CLIENT_ID", nullable = false)
    public int getClientId() {
        return this.clientId;
    }

    public void setClientId(int clientId) {
        this.clientId = clientId;
    }



}














package com.ccdm.vo;
// Generated 19 Dec, 2016 5:50:57 PM by Hibernate Tools 5.2.0.CR1

import static javax.persistence.GenerationType.IDENTITY;

import java.util.HashSet;
import java.util.Set;

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 com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;

/**
 * ViewModel generated by hbm2java
 */
@Entity
@Table(name = "view_model", catalog = "ccdmdb")
@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
public class ViewModel implements java.io.Serializable {

    private static final long serialVersionUID = -7778681960884580713L;
    private Integer vmId;
    @JsonIgnore
    private AppUser appUser;
    @JsonIgnore
    private OperatingSystem operatingSystem;
    @JsonIgnore
    private VirtualMachine virtualMachine;
    private String name;
    private int clientId;
    @JsonIgnore
    private Set<SolutionVmMap> solutionVmMaps = new HashSet<SolutionVmMap>(0);
    @JsonIgnore
    private Set<LoadBal> VmTemplates = new HashSet<LoadBal>(0);

    public ViewModel() {
    }

    public ViewModel(AppUser appUser, OperatingSystem operatingSystem, VirtualMachine virtualMachine, String name,
            int clientId) {
        this.appUser = appUser;
        this.operatingSystem = operatingSystem;
        this.virtualMachine = virtualMachine;
        this.name = name;
        this.clientId = clientId;
    }

    public ViewModel(AppUser appUser, OperatingSystem operatingSystem, VirtualMachine virtualMachine, String name,
            int clientId, Set<SolutionVmMap> solutionVmMaps, Set<LoadBal> VmTemplates) {
        this.appUser = appUser;
        this.operatingSystem = operatingSystem;
        this.virtualMachine = virtualMachine;
        this.name = name;
        this.clientId = clientId;
        this.solutionVmMaps = solutionVmMaps;
        this.VmTemplates = VmTemplates;
        System.out.println("vmtem------" + VmTemplates);

    }


    @Id
    @GeneratedValue(strategy = IDENTITY)

    @Column(name = "VM_ID", unique = true, nullable = false)
    public Integer getVmId() {
        return this.vmId;
    }

    public void setVmId(Integer vmId) {
        this.vmId = vmId;
    }

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "USER_ID", nullable = false)
    public AppUser getAppUser() {
        return this.appUser;
    }

    public void setAppUser(AppUser appUser) {
        this.appUser = appUser;
    }

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "OS_ID", nullable = false)
    public OperatingSystem getOperatingSystem() {
        return this.operatingSystem;
    }

    public void setOperatingSystem(OperatingSystem operatingSystem) {
        System.out.println("os" + operatingSystem);
        this.operatingSystem = operatingSystem;
    }

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "VIRTUAL_MACHINE_ID", nullable = false)
    public VirtualMachine getVirtualMachine() {
        return this.virtualMachine;
    }

    public void setVirtualMachine(VirtualMachine virtualMachine) {
        this.virtualMachine = virtualMachine;
    }

    @Column(name = "NAME", nullable = false, length = 100)
    public String getName() {
        return this.name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Column(name = "CLIENT_ID", nullable = false)
    public int getClientId() {
        return this.clientId;
    }

    public void setClientId(int clientId) {
        this.clientId = clientId;
    }

    @OneToMany(fetch = FetchType.LAZY, mappedBy = "viewModel")
    public Set<SolutionVmMap> getSolutionVmMaps() {
        return this.solutionVmMaps;
    }

    public void setSolutionVmMaps(Set<SolutionVmMap> solutionVmMaps) {
        this.solutionVmMaps = solutionVmMaps;
    }
    @OneToMany(fetch = FetchType.LAZY, mappedBy = "templates")
    public Set<LoadBal> getTemplates() {
        return this.VmTemplates;
    }

    public void setTemplates(Set<LoadBal> VmTemplates) {
        this.VmTemplates = VmTemplates;
    }



}

好吧,我是春天的新手。 当我尝试编译这些代码时,出现以下错误。 所以请帮我解决这个问题。 提前致谢!

org.springframework.http.converter.HttpMessageNotWritableException: Could not write content: failed to lazily initialize a collection of role:      com.ccdm.vo.ViewModel.templates, could not initialize proxy - no Session (through reference chain: com.ccdm.infrastructure.model.CCDMResponse["content"]->java.util.ArrayList[0]->com.ccdm.vo.ViewModel["templates"]); nested exception is com.fasterxml.jackson.databind.JsonMappingException: failed to lazily initialize a collection of role: com.ccdm.vo.ViewModel.templates, could not initialize proxy - no Session (through reference chain: 
        \\\com.ccdm.infrastructure.model.CCDMResponse["content"]->java.util.ArrayList[0]->com.ccdm.vo.ViewModel["templates"])

您的问题中的详细信息不足以帮助您立即解决它,但是您应该

  • Google for LazyInitializationException这是一个常见的新手问题。 这是运行时异常,而不是编译时
  • 阅读您正在使用的框架的文档(纯Spring或Spring Boot,JPA)如何打开事务/会话
  • 阅读有关JPA / Hibernate中延迟初始化的集合的信息
  • 确保在视图中打开会话/事务(通常是反模式)或在代码上放置@Transactional批注。

查看您的代码,您正在尝试将JPA实体序列化为JSON,以便在视图中打开会话将对您有用,但是您必须非常小心。 此模式仅在非常简单的应用程序中有用。

获取@ManyToMany@OneToMany对象时发生LazyInitializationException

在( @ManyToMany@OneToMany )的情况下,Hibernate处于LAZY加载状态,因此在获取@ManyToMany@OneToMany关系对象时,应首先在DAO层中进行迭代,并以其他方式获取数据,否则它将显示LazyInitializationException

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM