リレーションシップに接続されたさまざまなノードがあります。これらの関係では、列挙型のいくつかのプロパティを使用し、Cyper言語を使用して関係をクエリし、配列内にEnumプロパティを持つもののみを返します。また、クエリしようとしているリレーションシップは、クエリしたいプロパティを持つ別のサブクラスのサブクラスです。次に例を示します。
@RelationshipEntity
public class Mother {
@Indexed(level=Level.INSTANCE) Visibility visibility;
public Visibility getVisibility() {
return visibility;
}
public void setVisibility(Visibility visibility) {
this.visibility = visibility;
}
}
public class Child extends Mother {
@StartNode StartNode start;
@EndNode EndNode end;
}
可視性がプライベート、ネットワーク、またはパブリックのいずれかになり得る列挙型であると想像してください。次に、リポジトリで次のクエリを試しましたが、常にすべてを返すか、エラーをスローします。
@Query("start s=node({0}) match s-[r:TYPE]->e where r.visibility='Private' return r")
Iterable<Child> findChildren(StartNode start);
@Query("start s=node({0}) match s-[r:TYPE]->e where r.visibility=\"Private\" return r")
Iterable<Child> findChildren(StartNode start);
@Query("start s=node({0}) match s-[r:TYPE]->e where r.visibility=Private return r")
Iterable<Child> findChildren(StartNode start);
私が本当に使いたいのは「IN」演算子ですが、それはINが何であるかを知らないかのようにエラーをスローします。
@Query("start s=node({0}) match s-[r:TYPE]->e where r.visibility in ['Private', 'Network'] return r")
Iterable<Child> findChildren(StartNode start);
可視性がインデックスに登録されていませんか?または私はこれをすることになっていないのですか?代わりに、Visibilityプロパティを文字列で変更しようとはしていません。これは、クエリを実行できる他のStringプロパティがあるため、機能するはずです。'IN'演算子の使用はボーナスです!
編集1:私はspring-data-neo4j2.0.1.RELEASEを使用しています。を使用して単体テストでこれを実行しようとしていますが、デフォルト構成を使用してサーバーを実行しているときorg.neo4j.test.ImpermanentGraphDatabase
にクエリが機能することに気付きました@Query("start s=node({0}) match s-[r:TYPE]->e where r.visibility='Private' return r")
が、それでも単体テストでは機能しません。また、サーバーを実行している場合でも、「IN」句はエラーをスローします。これは私が使用しているバージョンに関連していますか?より新しいバージョンを使用しようとしたことを覚えていますが、依存関係が失敗したため、再試行する必要があります。
編集2:そこで、spring-data-neo4jのバージョンを2.1.0.BUILD-SNAPSHOTに更新し、neo4jバージョンも1.7にアップグレードしました。これで、「IN」キーワードのエラーは発生しませんが、検索対象の値を渡すためにどの構文を使用すればよいかわかりません。だから持っている
@Query("start s=node({0}) match s-[r:TYPE]->e where r.visibility in [{1}] return r")
Iterable<Child> findChildren(StartNode start, String visibility);
のような単純な文字列を渡す場合は機能しますが、一致を返しても何も返さないものPublic
を渡す場合は機能しません。のパラメータも変更してみましたが、まったく機能しません。Public, Private
Public
String visibility
String[] visibility