我正在使用 hibertnate 和 JPA 创建应用程序。我有 2 个类,即 Person 和 Associate。Person 是不言自明的,因为它包含一个人的详细信息(姓名、姓氏、性别等)。Associate 是一个将 2 个人员对象链接在一起的类(人员 A 与人员 B 对齐),有点像 Facebook 上的“朋友”。很简单,一个人(A 人)持有一个联系人列表,而一个 Associate 对象持有要链接的另一个人(B 人)以及他们之间的关系类型(朋友、家人等)。通过这种方式,A 可以知道他/她与谁有关联(即 A 知道他与 B 有关联)。该结构是打击。
假设发生的是,当一个人从数据库中删除时,他的所有关联也会被删除。那是删除的人以及与其他人的链接。问题是当我在 Person 类中使用级联删除时,它会删除关联以及关联对象中的所有人员对象。即如果人 A 和人 B 关联(在关联对象中)。当人 A 被删除时,关联对象和人 B 一样被删除。期望的结果是只有人 A 和引用人 A 的关联对象被删除,而不是人 B。人 B 对象应作为人保留在数据库中B没有被删除,只是两个人之间的关联。我不知道该怎么做。关于如何达到预期结果的任何想法?或者如果有更好的方法来关联 2 个人对象。
- 结构:
人员类
@实体
公共类人实现可序列化{
private Long id;
private String firstName;
private String lastName;
private String gender;
@OneToMany (cascade = {CascadeType.ALL})
@Cascade({CascadeType.SAVE_UPDATE, CascadeType.DELETE})
@JoinColumn(name = "person_id")
private List<Associate> associations;
//setters
//getters
}
关联类 @Entity
公共类 Associate 实现 Serializable {
private Long id;
@ManyToOne
private Person associate;
private String relationshipType;
@OneToOne (cascade = {CascadeType.ALL})
@Cascade({CascadeType.SAVE_UPDATE, CascadeType.DELETE})
private AssociateSettings;
//setters
//getters
}