我们使用spring-data hibernate作为ORM来访问我们的db。我已成立实体如下:Hibernate集合保留对已删除实体的引用
class E1 {
@Column(name = "e1_id")
private BigDecimal e1_id;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "e1", orphanRemoval=true, fetch = FetchType.EAGER)
@Fetch(value = FetchMode.SUBSELECT)
private Collection<E2> e2List;
}
class E2 {
@Column(name = "e2_id")
private BigDecimal e2_id;
@JoinColumn(name = "e1_id", referencedColumnName = "e1_id")
@ManyToOne
private E1 e1;
}
现在我尝试以下方法: 创建一个新的E1和节约使用JPA春天库,没有明确的Spring事务。
E1 detachedE1 = e1Repo.save(e1);
e1有一个非空集合的e2。
我从e1中删除e2实体,然后在spring事务中保存e1。
然后,我尝试使用detachedE1如下:
detachedE1.setE2Collection(Collections.emptyList())
e1Repo.save(detachedE1)
上面的代码错误了,并且误差基本上说:
springframework.orm.jpa.JpaObjectRetrievalFailureException:无法找到实体.E2 with id 1.00
我的问题是,JPA如何保留对已删除集合的引用。我将E2集合设置为空列表。而且我还验证了由e1Repo.find(detachedE1.e1_id)返回的实体具有一个空集合。
在此先感谢您的回复/指点!
只想添加我们使用休眠休眠-的EntityManager-4.3.8.Final.jar