Hibernate - 删除对象引用而不删除对象

时间:2012-04-25 15:08:52

标签: hibernate java-ee jpa

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

}

1 个答案:

答案 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
}

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