【发布时间】:2019-11-27 08:17:52
【问题描述】:
我正在使用 spring-data 将数据持久化到 mysql 数据库。 我有一个包含子实体列表的父实体:
@Entity
public class Parent
{
private Long id;
@Unique
private String name;
@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
@JoinColumn(name = "parent_id")
private List<Child> childs;
// Getter, Setter
}
这是子实体:
@Entity
@Table(
uniqueConstraints = { @UniqueConstraint(columnNames = { "parent_id", "name" }) }
)
public class Child
{
private Long id;
@Unique
private String name;
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "parent_id")
private Parent parent;
// Getter, Setter
}
在数据库中,我在这两个类中具有相同的活动约束。 现在,我想像这样更新父母的孩子:
@Service
public class ParentService
{
// ...
@Transactional
public Parent updateParent(String name, List<Child> newChilds)
{
Parent existingParent = parentRepository.findByName(name);
existingParent.setChilds(newChilds);
return parentRepository.save(existingParent);
}
// ...
}
但是,如果孩子的唯一约束(名称 + parent_id)具有相同的名称,则它们将失败。我怎样才能确定在新的孩子被持久化之前旧的孩子被删除了?
【问题讨论】:
标签: mysql spring-data-jpa spring-data constraints