0

リレーションシップに接続されたさまざまなノードがあります。これらの関係では、列挙型のいくつかのプロパティを使用し、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, PrivatePublicString visibilityString[] visibility

4

3 に答える 3

0

dbに対してスタンドアロンでクエリを実行しようとしましたか?neo4j-shell、neoclipse、またはサーバーのいずれかを使用しますか?または、プログラムで単体テストを行いますか?また、ノードと関係が存在するかどうか、およびそれらが持つプロパティを確認してください。

インデックス作成はクエリとは関係ありません。

列挙型は、プロパティに文字列として格納されます。

いくつかのメモ:

  • どのように関係を作成しますか?
  • エンティティのプライベートクラスはおそらく問題を引き起こす可能性があります
  • TYPEリレーションシップタイプが実際に使用するものであることを確認してください

neo4jコンソールのこの例は、それが機能することを示しています。どのバージョンのNeo4jを使用していますか?

于 2012-06-18T10:54:59.630 に答える
0

ジヨーメ:

あなたは弱点を見つけました。私は問題を提起しました、そしてこれはすぐに取り組まれるでしょう。ここで追跡できます:

https://jira.springsource.org/browse/DATAGRAPH-281

よろしく、

ラッセ

于 2012-08-09T14:45:51.613 に答える
0

@ギヨーム、

これが行われます:https ://jira.springsource.org/browse/DATAGRAPH-281

ビルドスナップショットで利用可能であり、SDN 2.1.RC4/GAに含まれます

よろしく、

ラッセ

于 2012-09-04T08:33:31.733 に答える