2014-01-11 2 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; 

    [...] 
} 

ManyToMany 관계가 작동하지만 난이 OneToMany 관계를 구현하는 방법을 모른다 :

이 내 구현입니다.

+1

mainCategory에서 @ManyToOne을 사용해 보셨나요? – SirRichie

+0

private 카테고리 entries'와'@ ManyToOne'에'@OneToMany (mappedBy = "mainCategory")'를 시도했지만''@ OneToMany'와 동일한 속성에'@ ManyToMany'가 있습니다. 허용되지 않음 ". – Marcello90

답변

2

단일 속성에 두 개의 별도 매핑을 정의 할 수 없습니다. 포함해야하는 데이터가 잘 정의되어 있지 않습니다. subCategories 필드 또는 mainCategory 또는 둘 모두에 의해 매핑 된 항목이 포함되어야합니까? 모든 유스 케이스에 대해 의미있는 대답이 없으므로 JPA는 이러한 여러 주석을 허용하지 않습니다.

그러나 일대 다 관계의 역 (비 소유)면에 해당하는 필드를 추가 할 수 있습니다.

하면이처럼 정의 : 나는 반대 측에 대한 더 나은 이름으로 와서, 그래서 당신의 상황 :

EDIT를 사용할 수없는

public class Category ... 

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

: 당신은 targetEntity를 정의 할 필요가 없습니다 서로 다른 패키지에 CategoryEntry 엔티티가 여러 개있는 경우를 제외하고는 입력 된 컬렉션에 대한 속성입니다.