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

問題發生背景:JPA做數據持久操作。

表之間關係:

機構對象:

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

部門對象:

@ManyToMany
@JoinTable(name = "depts_organs",
        joinColumns = {@JoinColumn(name = "dept_id",referencedColumnName = "id")},
        inverseJoinColumns = {@JoinColumn(name = "organ_id",referencedColumnName = "id")})
private Set<Organization> 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);
}

問題解決!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章