如何将org.neo4j.rest.graphdb.entity.RestNode转换为Spring Data Neo4j节点实体

时间:2013-03-18 09:24:45

标签: neo4j spring-data spring-data-neo4j

我正在使用Spring Data for Neo4j来访问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_userlocationscount等密钥。

从调试语句我可以看到similar_userorg.neo4j.rest.graphdb.entity.RestNode的一个实例。有没有办法将它转换为我的Spring数据节点实体com.abc.graph.entity.User

1 个答案:

答案 0 :(得分:3)

您可以使用以下方式手动执行:

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

或者您将IterableCollection注释为@MapResult的接口定义为三列的getter。它会自动将getter名称映射到结果列,或者您可以提供要映射到的名称。

@MapResult
interface SimilarUser {

   @ResultColumn("count") int getCount();
   @ResultColumn("similar_user") User getUser();
   @ResultColumn("locations") Collection<Location> getLocations();
}