首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用JPA、Hibernate建立与同一实体的关系

如何使用JPA、Hibernate建立与同一实体的关系
EN

Stack Overflow用户
提问于 2012-02-04 09:47:25
回答 3查看 1.1K关注 0票数 2

我试图在不同的人之间建立关系,但却找不到如何使用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提供程序实现上述功能,请有人分享您的经验。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-02-04 09:58:25

最简单的方法是在一个OneToMany实体和一个RelationShip实体之间使用一个Person关联,每个实体映射关联的表:

代码语言:javascript
运行
复制
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());
            }
        }
    }

    ...
}
票数 0
EN

Stack Overflow用户

发布于 2012-02-04 09:53:37

使用可连接的标准多到多关系。

票数 0
EN

Stack Overflow用户

发布于 2012-02-04 18:10:28

尝尝这个。

代码语言:javascript
运行
复制
@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)做区分不同类型关系的艰苦工作。

如果现实生活如此简单就好了!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9139930

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档