org.hibernate.lazyinitializationexception could not initialize proxy - no session

问题发生背景:JPA做数据持久操作。

表之间关系:

org.hibernate.lazyinitializationexception could not initialize proxy - no session_第1张图片

机构对象:

@JsonIgnore
@ManyToMany(mappedBy = "organs")
private Set depts;

部门对象:

@ManyToMany
@JoinTable(name = "depts_organs",
        joinColumns = {@JoinColumn(name = "dept_id",referencedColumnName = "id")},
        inverseJoinColumns = {@JoinColumn(name = "organ_id",referencedColumnName = "id")})
private Set organs;

机构表的增加操作没问题。但是部门表增加数据时,需要获取机构对象并存入,此时出现org.hibernate.lazyinitializationexception could not initialize proxy - no session 异常。

// 测试代码,所以存在逻辑判断不严谨情况
Organization organization = organizationRepository.findById(11996L).get();
Dept dept= new Dept();
dept.getOrgans().add(organization);
deptRepository.saveAndFlush(website);

执行后抛出异常

网上一些关于“JPA或hibernate的延迟加载的原因说话,在我这边不可行。

最后我在“机构”模型中:重写hashcode和tostring,将部门字段剔除掉。

@Override
public String toString() {
    return "Organization{" +
            "name='" + name + 
            '}';
}

@Override
public boolean equals(Object o) {
    if (this == o) return true;
    if (o == null || getClass() != o.getClass()) return false;
    if (!super.equals(o)) return false;
    Organization that = (Organization) o;
    return Objects.equals(name, that.name);
}

@Override
public int hashCode() {
    return Objects.hash(super.hashCode(), name);
}

问题解决!!!

你可能感兴趣的:(java)