我想自动保留/合并Address
个实体。创建后,任何人都可以更新它们,但如果删除了Person
,则不会将其删除。
//each person can only have one address
@Entity
public class Person {
@ManyToOne
private Address address;
}
//one address can be assigned to multiple persons (eg family members)
@Entity
public class Address {
@OneToMany
private List<Person> persons;
}
问题:
cascade
注释?person.setAddress(address)
或address.getPersons().add(person)
?答案 0 :(得分:0)
我认为两者的@Cascade({CascadeType.MERGE})
都是你想要的。
我可能会在没有地址的情况下创建并保留Person
,然后在Address
实体中创建类似的内容:
public void addPerson(Person person) {
persons.add(person);
person.setAdderess(this);
}
希望这有帮助。
答案 1 :(得分:0)
cascade=CascadeType.REMOVE
来避免删除
Address
如果删除了Person
:@OneToMany(cascade = CascadeType.REMOVE mappedBy = "person")
你可以看看this article它解释了同样情况下的相同行为,并说:
如果仅指定了cascade = CascadeType.REMOVE,则不会执行自动操作,因为删除关系不是删除操作。
person.setAddress(address); address.getPersons().add(person);
请查看here以获取更多信息。