0

Neo4jのSpringDataを使用してNeo4jグラフにアクセスしています。私はUserRepository以下のような注釈付きのクエリを持っています:

package com.abc.graph.repository;

import java.util.List;
import java.util.Map;

import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.neo4j.annotation.Query;
import org.springframework.data.neo4j.repository.GraphRepository;
import org.springframework.data.neo4j.repository.NamedIndexRepository;
import org.springframework.data.neo4j.repository.RelationshipOperationsRepository;

import com.abc.graph.entity.User;

public interface UserRepository extends GraphRepository<User>, NamedIndexRepository<User>,
        RelationshipOperationsRepository<User> {
    public User findById(String id);

    public Page<User> findByNameLike(String name, Pageable page);

    @Query("START user=node:User(id={0}) " +  
            "MATCH user-[:VISITS]->(location)<-[:VISITS]-(similar_user) " +
            "RETURN similar_user, collect(location) as locations, count(*) as count " + 
            "ORDER BY count desc ")
    public List<Map<String, Object>> findSimilarUsersByPlaceVisited(String userId);
}

私がグラフから取得しようとしているのは、同様の場所に行ったことのあるユーザーのリストであり、各ユーザーについて、彼らが行ったことのある一般的な場所は何ですか。このメソッドは、のリストを返しMap<String, Object>ます。各マップには、、、などのキーが含まれsimilar_userます。locationscount

similar_userデバッグステートメントから、それがのインスタンスであることがわかりますorg.neo4j.rest.graphdb.entity.RestNode。それを私のSpringDataノードエンティティに変換する方法はありますcom.abc.graph.entity.Userか?

4

1 に答える 1

3

次を使用して手動で行うことができます。

template.createEntityFrom[Stored]State(userNode[,User.class)

または、結果として、3つの列のゲッターで注釈が付けられたインターフェースのIterableまたはを定義します。ゲッター名を結果列に自動的にマップするか、マップする名前を指定できます。Collection@MapResult

@MapResult
interface SimilarUser {

   @ResultColumn("count") int getCount();
   @ResultColumn("similar_user") User getUser();
   @ResultColumn("locations") Collection<Location> getLocations();
}
于 2013-03-18T12:15:23.017 に答える