2014-01-11 70 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实体。