4

我有 2 张桌子:

第一个是“人”:

  • person_id,
  • 人名

第二个是“PersonsGraphs”:

  • person_id1,
  • person_id2,
  • 关系类型

我正在寻找一种建立“家谱”的方法。

我的第一个选择是:将 personGraphs 加载到 HashTable 中,然后递归地构建树。

我想出的第二个选项:使用@OneToMany jpa-relation. 这可以工作,但有时我有一些relation_types我想要/不想包含的内容。是否有任何选项可以让我@OneToMany在使用时对关系设置一些条件@JoinTable

谢谢!橡木

4

2 回答 2

3

尝试使用 Hibernate@Where 注释,例如:

@Entity
public class Person {

    @Id
    @GeneratedValue
    private Integer id;

    private String name;

    @Enumerated(EnumType.STRING)
    private Gender gender;

    @ManyToOne
    private Person parent;

    @Where(clause = "gender = 'MALE'")
    @OneToMany(mappedBy = "person")
    private List<Person> sons;

    @Where(clause = "gender = 'FEMALE'")
    @OneToMany(mappedBy = "person")
    private List<Person> daughters;
}

public enum Gender {
   MALE, FEMALE
}
于 2018-02-26T10:24:05.210 回答
1

我建议创建一个关系类来为连接表建模。

人 - OneToMany - 关系 - 关系 - ManyToOne 源 - ManyToOne 目标

在 EclipseLink 中,您可以将表达式条件添加到任何关系映射中,

http://wiki.eclipse.org/EclipseLink/Examples/JPA/MappingSelectionCriteria

于 2013-05-02T12:42:11.417 回答