2010-12-15 2 views
2

JPQLを使用してツリー構造を選択しようとしています。マッピングは私が期待したものとは少し違って動作します。それは親にツリー構造をマップしますが、リストのchildNodesは常にnullである:(ここに私のマッピングです:ここではJPAツリーを選択すると、childNodesは常にnullです

@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; 

はクエリです:ここでは

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

は、私のテーブルデータである:

ID, PARENT_ID 
    1  NULL 
    2   1 
    3   1 
    4   3 

私は熱心で怠け者のFetchTypeを試しましたが、childNodesは常にnullです(任意の考え?

答えて

1

Odd。JPAプロバイダとバージョンを使用していますか?

ジョインフェッチを削除した場合は、その子を取得しますか? 子にはどのようなSQLが実行されますか?

ノードの親を設定する場合は、その子も追加しますか?そうしないと、子を持たない親がEntityManagerにキャッシュされる可能性があります。リフレッシュすると子が得られますか?

+0

Jamesに感謝します。キャッシュが問題の原因だった! – maxx

関連する問題