[英]How to establish relationship with same entity using JPA, Hibernate
我正在嘗試在不同的人之間建立關系,但是找不到使用JPA的方法。 以下是支持該需求的模型:
人員表:
Id FirstName姓氏
1約翰·海勒
2約瑟夫·海勒
3安德魯·海勒
4史蒂芬·海勒
Person_Relationship表
Id Person1 Person2關系
1 1 2父母
2 2 1兒童
3 1 3兄弟姐妹
4 3 1同級
5 4 1秘書
如果您曾經使用Hibernate作為JPA提供程序來實現上述功能,請與他人分享您的經驗。
使用可連接的標准多對多關系。
最簡單的方法是在Person
實體和RelationShip
實體之間使用OneToMany關聯,每個實體都映射關聯的表:
public class Person {
@OneToMany(mappedBy = "person1")
private List<RelationShip> relationships;
public List<Person> getSiblings() {
List<Person> result = new ArrayList<Person>();
for (RelationShip r : relationShips) {
if (r.getType() == RelationshipType.SIBLING) {
result.add(r.getPerson2());
}
}
}
...
}
嘗試這個。
@Entity
public class Person {
@Id
private Long id;
@OneToMany
Set<Sibling> siblings;
@OneToMany
Set<Parent> parents;
@OneToMany
Set<Child> children;
@OneToMany
Set<Secretary> secretaries;
}
@Entity
@Table(name="person_relationship")
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="relationship", discriminatorType=DiscriminatorType.STRING)
public abstract class Relationship {
@Id
private Long id;
@OneToOne
@JoinColumn(name="person1")
private Person owner;
@OneToOne
@JoinColumn(name="person2")
private Person related;
}
@Entity
@DiscriminatorValue("Sibling")
public class Sibling extends Relationship {}
@Entity
@DiscriminatorValue("Child")
public class Child extends Relationship {}
@Entity
@DiscriminatorValue("Parent")
public class Parent extends Relationship {}
@Entity
@DiscriminatorValue("Secretary")
public class Secretary extends Relationship {}
使用此功能,Hibernate(JPA)會做出艱苦的工作來區分不同類型的關系。
如果只有現實生活這么簡單! ;-)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.