【发布时间】:2017-03-08 22:13:43
【问题描述】:
我们使用 spring-data hibernate 作为我们的数据库访问的 ORM。我的实体设置如下:
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 并使用 spring JPA 存储库保存,无需显式的 spring 事务。
E1 detachedE1 = e1Repo.save(e1);
e1 有一个非空的 e2 集合。
我从 e1 中删除 e2 实体,然后将 e1 保存在 spring 事务中。
然后,我尝试使用 detachedE1 如下:
detachedE1.setE2Collection(Collections.emptyList())
e1Repo.save(detachedE1)
上面的代码报错了,报错基本是说:
springframework.orm.jpa.JpaObjectRetrievalFailureException: Unable to find entity.E2 with id 1.00
我的问题是,JPA 如何保留对已删除集合的引用。我将 E2 集合设置为空列表。而且我还验证了 e1Repo.find(detachedE1.e1_id) 返回的实体有一个空集合。
提前感谢任何回复/指点!
只是想添加我们使用hibernate hibernate-entitymanager-4.3.8.Final.jar
【问题讨论】:
标签: java hibernate orm spring-data-jpa