2013-06-12 6 views
2

아래 Cypher 쿼리가 있습니다. 플레이어 목록과 각 플레이어가 수행 한 모든 리그 목록을 반환합니다. 이제 각 반환 된 플레이어에 대해 NodeProxy 대신 PersonNodeEntity을 만들고 싶습니다. 이렇게하는 효율적인 방법이 무엇인지 궁금합니다.spring-data-neo4j에서 NodeProxy를 NodeEntity로 변환하십시오.

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 목적은 @Autowired 주석을 사용하여 스프링 데이터 Neo4j 인프라 주입

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

:이 예이다.

+0

neo4jOperations가 삽입되지 않고 있습니다. 내 서비스에서 null입니다. –

+0

SDN 4에서 어떻게 달성 할 수 있습니까? – alexanoid

+0

SDN 4 Neo4jOperations는 더 이상 사용되지 않으므로 [paragraph 11.3] (http://docs.spring.io/spring-data/data-neo4j/docs/4.2.0.RELEASE/reference/html/#_query_methods)을 읽어보십시오. SDN 4 문서에서 쿼리 결과를 수집하는 방법을 이해할 수 있습니다. – remigio