【发布时间】:2021-07-28 20:52:00
【问题描述】:
由于 Hibernate 执行的操作顺序,我收到了约束冲突异常。我定义了以下实体。
@Entity
public class A {
@Id
private Integer id;
@OneToMany(mappedBy = "a", fetch = FetchType.LAZY, cascade = CascadeType.ALL, orphanRemoval = true)
private List<B> bList;
public void setBList(List<B> bList) {
if(CollectionUtils.isNotEmpty(this.bList)) {
this.bList.clear();
}
if(CollectionUtils.isNotEmpty(bList)) {
this.bList.addAll(bList);
}
}
}
@Entity
@Table(uniqueConstraints={@UniqueConstraint(columnNames = {"name", "a_id", "isDeleted"})})
public class B {
@Id
private Integer id;
private String name;
@ManyToOne(fetch = FetchType.LAZY, optional = false)
@JoinColumn(name="a_id")
private A a;
private boolean isDeleted;
}
当我在实体 A 中设置新的 B 列表(包含一个更新为已删除的项目和一个在与约束对应的列中具有相同值的新项目)并保存实体 A 时,我得到约束违规。
Hibernate 在将旧项目更新为已删除之前执行新项目的插入,这会导致违反约束,而实际上应用程序中的数据是正确的。
我在这里做错了什么还是有任何配置或修复?
【问题讨论】:
标签: java sql-server hibernate