問題發生背景: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); }
問題解決!!!