最近,我一直在开发一个基础项目,并且遇到了一个场景。假设我有一个School
,其中包含User
个列表,这些列表可能具有新的或现有的地址,如下所示:
@Table("school") @Entity
class School {
@OneToMany(cascade=CascadeType.ALL, mappedBy="school")
private List<User> students;
}
@Table("user") @Entity
class User {
@ManyToOne
@JoinColumn(...)
private School school;
@ManyToOne(cascade=?)
@JoinColumn(...)
private Address address;
}
@Table("address") @Entity
class Address { ... } // No bi-directional relationship
每当我尝试坚持时,我都会得到输出:
如果School
仅具有新地址的User
s并且级联类型设置为ALL
或PERSIST
,则保存{ {1}}正常工作。
如果School
仅具有现有地址的School
且省略了层叠类型,则在保存新的User
时它会按预期工作。
使用新地址和现有地址保存包含School
的{{1}}的新实例,并将CascadeType设置为School
时,会抛出{{1} }。(我了解,因为列表中保存了地址)
在保存具有新地址和现有地址但未设置级联类型的混合User
的{{1}}实例时,将按预期方式抛出临时异常。
我想知道是否有解决方案,而不是在保存ALL
对象之前保存每个用户地址。