簡體   English   中英

如何使用JPA,Hibernate與同一實體建立關系

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM