2010-12-15 2 views
2

JPQL을 사용하여 트리 구조를 선택하려고합니다. 매핑은 예상했던 것보다 약간 다릅니다.JPA 트리를 선택하면 childNodes는 항상 null입니다.

ID, PARENT_ID 
    1  NULL 
    2   1 
    3   1 
    4   3 

: 여기

List<TreeNode> list = super.getEntityManager().createNamedQuery("TreeNode.findAllTree").getResultList(); 

내 테이블 데이터입니다 :

여기
@Entity 
@NamedQueries({ 
     @NamedQuery(name = "TreeNode.findAllTree", 
       query = "select p from TreeNode p " + 
        "LEFT JOIN fetch p.parentNode"), 
    }) 
public class TreeNode { 
    @Id 
    private long id = 0; 

    @ManyToOne 
    @JoinColumn(name = "parent_id") 
    public TreeNode parentNode; 

    @OneToMany(mappedBy="parentNode") 
    public List<TreeNode> childNodes; 

쿼리 : 그것은 부모 트리 구조를 매핑하지만 목록 childNodes에 항상 널 :(여기 내 매핑 열망하고 게으른 FetchType을 시도했지만 childNodes는 항상 null입니다 (모든 생각?

답변

1

이상한 JPA 공급자 및 버전을 사용하고 있습니까?

조인 가져 오기를 제거하면 자녀를 갖게됩니까? 아이들을 위해 어떤 SQL이 실행됩니까?

노드의 부모를 설정할 때 하위 노드도 추가합니까? 부모가 없으면 EntityManager에 캐시가 될 수 있습니다. 자식을 새로 고칩니다.

+0

James에게 감사드립니다. 캐시가 문제의 원인이었습니다! – maxx

관련 문제