2011-08-30 84 views
1

我是新來的Play Framework,Java和Hibernate JPA,所以非常感謝任何幫助(來自PHP)。玩JPA休眠特殊的自引用雙向ManyToOne/OneToMany關係加入問題

我的目標是建立一個類別樹。它本質上是無限的父母/子女關係。

每個類別關係都需要附加一些特定於該關係的註釋,而不是構成該關係的各個類別。

所以在數據庫中我加入/​​關係表看起來像:

| id | cat1id | cat2id | data1 | data2 | order | 
| 1 | 1  | 3  | stuff | more | 1  | 
| 2 | 1  | 4  | fish | fun | 2  | 
| 3 | 3  | 2  | ants | whoa | 1  | 

我試圖在Category類做@ManyToMany,無法弄清楚如何獲得額外的領域

我現在創建了一個具有所有類別內容的Category類,並且具有包含上述數據的CategoryTree類。 CaaegoryTree cat1id是@ManyToOne到Category和CategoryTree cat2id是@ManyToOne到Category和OneToMany都來自Category。這一切在大多數情況下都可以正常工作,但只是感覺不對。

另外,我想在Category類中有一個名爲ParentCats和ChildCats的屬性,它們分別是這個Category對象是父類和子類的一個List或Set類。我可以用一個函數來完成所有這些事情,但是像更普通的實體關係那樣,這種信息很容易以這種方式檢索出來。

任何想法,指導或戳在正確的方向感謝!

回答

2

對於第一部分,您在OO意義上實際需要的是關聯類。不幸的是,這些不受JPA的支持。檢查這個鏈接:ManyToMany with additional columns這是或多或少你已經有。

對於你的問題的第二部分,只要使用的自參考,雙向關聯關係:

public class Category extends Model { 

    @ManyToMany(mappedBy="parentCats") 
    public Set<Category> subCats; 

    @ManyToMany 
    public Set<Category> parentCats; 

} 
+0

感謝。是的,我有自我引用,雙向關聯,它完美地完成了這項工作。但有了關聯類的東西,我有點和這一點,我不會結束與兩個存儲相同的信息不同的數據庫表?所以我不確定你的建議是使用其中一個還是另一個?或者,第一種方法是行不通的?或者我錯過了一些東西。 – bladmiral