2013-06-12 4 views
2

У меня есть следующий запрос Cypher. Он возвращает список игроков и список всех лиг, которые играют каждый игрок. Теперь для каждого из возвращенных игроков я хотел бы создать PersonNodeEntity вместо использования NodeProxy. Интересно, что это эффективный способ сделать это.Преобразование NodeProxy в NodeEntity в spring-data-neo4j

String q = "START t=node({teamId}) MATCH player-[:PLAYED_WITH_TEAM]->t-[:CONTESTED_IN]->league WITH player AS player, league.startDate AS startDate, league.name AS leagueName ORDER BY startDate RETURN player, collect(leagueName) AS leagueNames"; 

Map<String, Object> params = Maps.newHashMap(); 
params.put("teamId", selectedTeam); 

Result<Map<String, Object>> result = template.query(q, params); 

final List<Player> players = new ArrayList<Player>(); 

result.handle(new Handler<Map<String, Object>>() 
{ 
    @Override 
    public void handle(Map<String, Object> value) 
    {  
     players.add((Player) value.get("player")); 
    } 
}); 

Исключение

SEVERE: Servlet.service() for servlet [appServlet] in context with path [/avl] threw exception [Request processing failed; nested exception is java.lang.ClassCastException: org.neo4j.kernel.impl.core.NodeProxy cannot be cast to com.aravind.avl.domain.Player] with root cause 
java.lang.ClassCastException: org.neo4j.kernel.impl.core.NodeProxy cannot be cast to com.aravind.avl.domain.Player 
    at com.aravind.avl.controller.RegistrationController$1.handle(RegistrationController.java:103) 
+0

Вы находитесь в транзакционном контексте? – tstorms

ответ

3

Вы Шоуд использовать конвертировать метод из Neo4jOperations интерфейса для преобразования возвращенного объекта в надлежащем класс; это пример:

neo4jOperations.convert(value.get("player"), Player.class); 

neo4jOperations объекта впрыскивается инфраструктурой Спринг данных Neo4j с использованием @Autowired аннотации.

+0

neo4jOperations не впрыскивается, он недействителен в моей службе. –

+0

Как это можно сделать в SDN 4? – alexanoid

+0

Начиная с SDN 4 Neo4jOperations устарел, прочитав [пункт 11.3] (http://docs.spring.io/spring-data/data-neo4j/docs/4.2.0.RELEASE/reference/html/#_query_methods) в документации SDN 4, чтобы понять, как собирать результаты запроса. – remigio