1

neo4j-ogm を使用して、2 つのデータベース呼び出しを含む次のコードを作成しました。データベース呼び出しを 1 つだけにしたいのですが。

public Member loadMemberByDomainSpecificId(String domainSpecificId) {
        String query = "match (m:Member {domainSpecificId: {domainSpecificId}}) return m;";
        Map<String, String> parameters = new HashMap<String, String>();
        parameters.put("domainSpecificId", domainSpecificId);
        Session neo4jSession = Neo4jSessionFactory.getInstance().getNeo4jSession();
        Member member = neo4jSession.queryForObject(Member.class, query, parameters);
        return super.find(member);
}

最初のデータベース呼び出しは

  1. neo4jSession.queryForObject(Member.class, query, parameters);

2 番目のデータベース呼び出しは

  1. return (Member)super(find(member);

superreturn session.load(Member.class, member.getId(), 1);

はどこsessionですかneo4jSession

最初の API 呼び出しではノード / オブジェクトのみがフェッチされ、関連するノード / オブジェクトはフェッチされないため、2 番目の API 呼び出しを行います。2 番目の API 呼び出しは、ノードとそのすべての関係を更新します。

たった1回のデータベース呼び出しでこれらすべてを効率的に行う方法を知っている人はいますか?

queryForObject は、他の多くの neo4jSession メソッドがサポートしている可変深度をサポートしていないようです。

4

1 に答える 1

3

ほとんどすべてのNeo4jSession操作は、フィルターを仮引数として受け取ります。

フィルターを使用すると、一致させたい 1 つ以上のプロパティで、指定したタイプ (ラベル) のオブジェクトを選択できます。これらの操作は、フィルターから一致したすべてのノードを、それらに関連するノードと共に、指定した深さ (デフォルトの深さ = 1) に返します。そう:

Collection<Member> members = session.loadAll(Member.class, new Filters().add("domainSpecificId", domainSpecificId))

私が思うに必要なことをするべきです。

于 2015-09-15T22:38:40.697 に答える