我试图在不同的人之间建立关系,但却找不到如何使用JPA的方法。以下是为支持这一要求而提出的模式:
Person表:
Id FirstName LastName
1约翰
2约瑟夫-志愿人员
3安德鲁-私营公司
4史蒂文
Person_Relationship表
Id Person1 Person2关系
1-1-1
2-2
3.1-1
4、3/3
5 4/4
如果您曾经使用Hibernate作为JPA提供程序实现上述功能,请有人分享您的经验。
发布于 2012-02-04 09:58:25
最简单的方法是在一个OneToMany实体和一个RelationShip
实体之间使用一个Person
关联,每个实体映射关联的表:
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());
}
}
}
...
}
发布于 2012-02-04 09:53:37
使用可连接的标准多到多关系。
发布于 2012-02-04 18:10:28
尝尝这个。
@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)做区分不同类型关系的艰苦工作。
如果现实生活如此简单就好了!
https://stackoverflow.com/questions/9139930
复制相似问题