2013-05-01 55 views
1

我有2個表:JPA一對多與條件

首先是 「人」:

  • 爲person_id,
  • PERSON_NAME

第二個是 「PersonsGraphs」:

  • person_id1,
  • person_id2,
  • relation_type

我正在尋找一種方式來建立一個 「家譜」。

我的第一個選項是:將personGraphs加載到HashTable中,然後遞歸構建樹。

第二個選項我已經拿出:使用@OneToMany jpa-relation。這可以工作,但有時我有一些relation_types,我想/不想包括。在使用@JoinTable時,是否有任何選項可以讓我在@OneToMany關係中設置一些條件?

謝謝! 橡樹

+1

附註:我認爲應該將一個表命名爲Person和其他人員圖。 – 2013-05-02 05:40:36

+0

同意:) – oak 2013-05-02 10:38:18

回答

1

我建議創建一個關係類來建模連接表。

人 - 一對多 - 關係 - 關係 - 多對一源 - 多對一目標

在EclipseLink的,你可以添加一個表達式標準沒有任何關係的映射,

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

+0

嘿@詹姆斯,是否有可能在沒有EclipseLink的情況下實現相同的結果? – oak 2013-06-08 18:12:29

0

嘗試使用Hibernate @Whereannotation,例如:

@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 
}