1

我正在使用 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

}

4

1 回答 1

0

只创建一个实体 - Person - 这是该类的草图:

@Entity
public class Person{

 private Long id;
 private String firstName;
 private String lastName;
 private String gender;
 @OneToMany
 private List<Person> associates; 

 //setters
 //getters
}

每个人都可以与其他人的集合相关。不要使用级联删除,因为您可以轻松删除一半的数据库,只删除一个人。

于 2012-04-25T20:40:59.030 回答