如何从集合中删除和添加值



考虑以下实体:

@Entity
public class MainEntity {
/*...*/
@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, mappedBy = "mainEntity")
private Set<SubEntity> subEntities = new LinkedHashSet<>();
/*...*/
}

@Entity
@Table(uniqueConstraints = {
@UniqueConstraint(columnNames = {"foo", "bar"})
})
public class SubEntity {
/*...*/
@ManyToOne(optional = false)
private MainEntity mainEntity;
@Column(nullable = false)
private String foo;
@Column(nullable = false)
private String bar;
/*...*/
}

我创建一个新的MainEntity1SubEntity{foo:"a", bar:"b"}和坚持。

MainEntity mainEntity = new MainEntity();
SubEntity sub = new SubEntity();
sub.setFoo("a");
sub.setBar("b");
sub.setMainEntity(mainEntity);
mainEntity.setSubEntities(new LinkedHashSet<>(sub));
entityManager.persist(mainEntity);

然后我更新MainEntity通过删除上述SubEntity和添加一个新的同样的foo和bar。

我再次尝试保存MainEntity

SubEntity anotherSub = new SubEntity();
anotherSub.setFoo("a");
anotherSub.setBar("b");
anotherSub.setMainEntity(mainEntity);
// replace
mainEntity.setSubEntities(new LinkedHashSet<>(Arrays.asList(anotherSub)));
entityManager.persist(mainEntity); // throws org.hibernate.exception.ConstraintViolationException: could not execute statement

我希望最初的SubEntity被删除,新的SubEntity被添加。

然而,第一个查询添加新的SubEntity(之前删除旧的)不工作,因为是一个SQL唯一约束,违反了因为其他SubEntity还没有删除。

我错过了什么?

main_entry_id

相关内容

最新更新