2014-01-11 88 views
2

我在將ManyToMany與OneToMany關係結合時遇到問題。Hibernate/JPA:在同一屬性上的ManyToMany和OneToMany關係

我有條目和類別。每個條目都有一個主類別和0 .. *子類別。

這是我實現:

public class Entry extends AbstractEntity { 
    [...] 

    private Category mainCategory; 

    @ManyToMany(targetEntity = hello.Category.class) 
    private Set<Category> subCategories; 

    [...] 
} 

public class Category extends AbstractEntity { 
    [...] 

    @ManyToMany(targetEntity = hello.Entry.class, mappedBy = "subCategories") 
    private Set<Entry> entries; 

    [...] 
} 

的多對多關係是功能性的,但我不知道如何實現一對多的關係。

+1

你試過@ManyToOne mainCategory? – SirRichie

+0

我試過@ PrivateToMany(mappedBy =「mainCategory」)'私人設置條目'和'@ ManyToOne'在'private Category mainCategory'上,但我在同一個屬性上有''@ OneToMany'和'@ ManyToMany'不允許」。 – Marcello90

回答

2

您無法在單個屬性上定義兩個單獨的映射。它應該包含的數據不明確。是否應該包含由subCategories字段或mainCategory或兩者映射的條目?由於對於所有用例都沒有一個合理的答案,所以JPA不允許使用這樣的多個註釋。

但是,您可以只添加一個對應於一對多關係的逆(非擁有)一側的字段。

將其定義是這樣的:

public class Category ... 

    @ManyToOne(mappedBy="mainCategory") 
    private Set<Entry> entriesHavingThisCategoryAsMain; 

我無法想出了反側一個更好的名字,所以使用方面:)

編輯:你不需要定義targetEntity屬性,除了在不同的包中有多個CategoryEntry實體。