2013-02-22 3 views
3

JPA 애플리케이션을 작성하려고합니다. 나는 기본적으로 내가 성공적으로 item 목록에 하나 개의 항목을 추가 할 수 있습니다JPA 동일한 엔티티에 대한 OneToMany 다중 관계

@Entity 
public class Folder { 
    @Id 
    @GeneratedValue(strategy = GenerationType.TABLE) 
    private int id; 
    private String description; 
    private String name; 

    @OneToMany(mappedBy = "parent", cascade = CascadeType.PERSIST) 
    private List<AbstractItem> items = new LinkedList<AbstractItem>(); 

    @OneToMany(mappedBy = "parent", cascade = CascadeType.PERSIST) 
    private List<AbstractItem> items2 = new LinkedList<AbstractItem>(); 
    . 
    . 
    . 
} 

를 가지고 있고, 그것을 유지. 그러나 내가 다시로드하면 persistet Item의 동일한 Object가 List itemsitems2 모두에 있습니다.

@JoinTable 주석을 추가하여이 문제를 해결하려고했지만 작동하지 못했습니다.

제안 사항?

+0

코드가 여기에서 냄새가납니다 (중복 매핑 및 거의 중복되는 변수 이름). * 당신이 정말로 이루고자하는 것은 무엇입니까? * – Perception

+0

그것은 그 문제를 명확하게하는 작은 예일뿐입니다. 문제가 발생한 실제 설정은 여기에 게시하는 것이 좋습니다. – Simiil

답변

3

각 경우에 대해 AbstractItem의 'Folder'에 대한 참조가 두 개 있어야합니다. 따라서, mappedBy 값은 예컨대 :

@OneToMany(mappedBy = "parent", cascade = CascadeType.PERSIST) 
    private List<AbstractItem> items = new LinkedList<AbstractItem>(); 

    @OneToMany(mappedBy = "parent2", cascade = CascadeType.PERSIST) 
    private List<AbstractItem> items2 = new LinkedList<AbstractItem>(); 
1

귀하의 mappedBy 속성 즉 AbstractItemparent라는 이름의 고유 한 특성에 연결되고, 그에 따라 지정해야합니다, 당신은 같은 속성에 의해 AbstractItemFolder 연결된다.
두 번째 목록을 parent2으로 매핑하면 AbstractItem ~ Folder 테이블에 2 개의 외래 키가 있습니다.
새 특성을 원하지 않을 경우 AbstractItem에 두 개의 연관 테이블 (itemsitems2)을 사용하십시오.