私はツリー構造をDBテーブルに格納しています。テーブルには複数のツリーを格納できます。 単一ツリーツリー内のすべてのノードを返すクエリが必要です。私はリソースとして以下のサイトを使用しましたが、それらのクエリはすべてのツリーのすべてのノードをPersistenceContextにロードします(テーブル全体をロードするのではありませんか?)。私はそれをしたくない、私は1つのツリーをロードするだけです。私はそれをどのように達成するのですか?単一ツリー内のすべてのノードを取得するためのJPAクエリ
JPA 2とHibernateをプロバイダとして使用しています。
OpenJPA 1.2.x select tree structure using JPQL
http://www.tikalk.com/java/load-a-tree-with-jpa-and-hibernate#comment-1821
[UPDATE]私はこのようなものを使用できるかどう@bennidiからの提案に基づいて、私は疑問に思う:
@Entity
public class Node {
private String name;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "rootId")
private Node root;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "parentId")
private Node parent;
@OneToMany(mappedBy = "parent", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@OrderBy("name")
private List<Node> children = new LinkedList<Node>();
}
JPQLクエリ:
select distinct n from Node n left join fetch n.children where n.rootId = ROOT_ID
を私は質問を持っていますが、01のように親子関係を維持するために2番目のテーブルを作成する必要があります、またはちょうど私が自己参照表を使用した場合は問題ありません。前者を使うと、もう少しメンテナンスが必要になりますし、おそらくもう少し複雑なクエリが必要になるようです。その価値はありますか?記事で扱っている問題は何か分かりません。
これはあなたが私にここでくれた素晴らしいアイデアです!あなたは副詩のための道を見つけましたか? – azerafati
、ここで使用しているすべてのfetchTypesはデフォルトのものです!あなたはそれらを取り除くことができ、それらはすべて同じになるでしょう – azerafati