我正在使用hibertnate和JPA创建应用程序。我有2个班,即人和副。人是非常自我解释的,因为它包含一个人的详细信息(姓名,姓名,性别等)。 Associate是一个将2个人对象连接在一起的类(A人排在B人之后),有点像facebook上的“朋友”。很简单,一个人(人A)持有一个关联者列表,一个关联对象持有另一个人(人B)被链接以及他们拥有的关系类型(朋友,家人等)。这样,人A可以知道他/她与谁相关联(即,人A知道他与人B相关联)。结构很震撼。
假设发生的事情是,当一个人从数据库中删除时,他的所有关联也会被删除。那是被删除的人和其他人的链接。问题是,当我在Person类中使用级联删除时,它会删除关联PLUS中关联对象中所有person对象的关联。即,如果人A和人B相关联(在关联对象中)。删除人员A时,关联对象与人员B一样被删除。期望的结果是仅人员A和关联对象引用人员A被删除而不是人员B.人员B对象应作为人员保留在数据库中B尚未删除,只是2人之间的关联。我不知道该怎么做。关于如何达到预期效果的任何想法?或者,如果有更好的方法来完成2人对象的关联。
PERSON CLASS
@Entity
public class Person实现Serializable {
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
public class Associate implements 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
}
答案 0 :(得分: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
}
每个人都可以与其他人的收集有关。不要使用级联删除,因为您只需删除一个人就可以轻松删除一半数据库。