私たちはSpring Data Neo4Jを使用するプロジェクトを持っています。重要なエンティティの一つは、以下の通りである:Neo4Jデータベースのリーフノードを見つける
@NodeEntity
public class Category {
@GraphId
Long id;
String name;
@RelatedTo(direction = Direction.INCOMING, type = "CHILD")
Category parent;
@RelatedTo(direction = Direction.OUTGOING, type = "CHILD")
Set<Category> children;
}
我々は名前が知られている特定のカテゴリから始まる(子なしつまり、カテゴリ)全てのリーフカテゴリを見つけるする必要があります。例えば、特定の階層は以下の通り:
Electronics
Camera
Point and Shoot
SLR
Computing
Desktop
Laptop
Tablet
Netbook
Furniture
Tables
Office tables
Home tables
Chairs
Lounge chairs
Office chairs
「オフィステーブル」を返すべきである「家具」の検索、「ホームテーブル」、「ラウンジチェア」や「オフィスチェア」。同様に、「Computing」の検索で「Desktop」、「Laptop」、「Tablet」および「Netbook」が返されます。
指定されたノードからすべてのリーフノードを取得するために、Springデータリポジトリメソッドに配置できるCypherクエリを作成する際に助けが必要です。
EDIT(関連する春データリポジトリ方式で)次のクエリは、ウェスから助けた後に働いた:
@Query(
"START category=node:__types__(className='org.example.domain.Category') " +
"MATCH category-[:CHILD*0..]->child " +
"WHERE category.name={0} AND NOT(child-[:CHILD]->()) " +
"RETURN child")
List<Category> findLeaves(String name);
にこれだけ作品を全てリーフノードを見つけるために探している場合ここでは2ノードのサブグラフ内の両方のノードがリーフノードとみなされる)。それ以外の場合は、クエリは2ノードのサブグラフ(およびその子)の親に対しても一致するため、これは機能しません。定義上、リーフノードは、子ノードのないノードである(少なくとも1つの親ノード)が、このクエリがチェックしているものではない。また、このクエリは、複数の着信関係があり、発信関係はない非ツリーグラフのリーフノードを特定することができません。 – InverseFalcon
無向グラフの場合はYes – Scott