2012-12-13 3 views
3

일부 노드를 Neo4j DB에 삽입했습니다. 데이터베이스에서 노드를 선택하고 특정 클래스로 캐스팅하려고합니다.Neo4j : spring-data-neo4j, 결과를 내 형식 클래스로 변환하는 방법?

+-------------------------------------------------------------------------+ 
| Node[11]{career:"programmer",name:"kelvin",age:35,introduce:"lazy doy"} | 
+-------------------------------------------------------------------------+ 

     @NodeEntity 
     class User { 
     @GraphId 
     Long id; 
     String name; 
     int age; 
} 

난 그냥 DB에서 노드의 ID, 이름, 나이를 얻을과에 넣어 원하는 : 같은 노드에 대한

class Service { 
    Neo4jTemplate neo4jTemplate 

    @Transactional 
    def find() { 
     def id1 = 11 
     //Knowledge k = neo4jTemplate.findOne(1, Knowledge) 
     Result result = neo4jTemplate.query("start n=node(11) return ID(n),n.name,n.age;", null) 
    //how to cast the result to User class 
     println "the tpye of result called User is "+ result.to(User.class).is(cn.edu.bnuz.itc.bok.sub2.User.class) 
    } 

} 

세부 : 여기

문제에 대한 몇 가지 코드입니다 사용자 클래스. 그러나 많은 방법으로 많은 시간을 실패했습니다.

다음과 같은 문제가 있습니다. 결과를 대상 클래스에 어떻게 캐스트 할 수 있습니까? 나는 캐스트하는 많은 방법을 시도했지만 마침내 실패합니다. 당신의 관심에 감사드립니다.

답변

1

반환 사용자 쿼리에서 노드는 인수로 원하는 클래스를 반환 Resultto 메소드를 호출

Result result = neo4jTemplate.query("start n=node(11) return n", null); 
for(User u : result.to(User.class)) { 
    doSomethingWith(u); 
} 

당신은 using repositories을 고려할 수 support cypher queries 같은 :

public interface UserRepository extends GraphRepository<User> { 
    @Query("start n=node(11) return n") 
    Iterable<User> getUser11(); 
} 
+0

이제 작동합니다. 정말 고마워요. 나는 이것을 달성하기 위해 다음과 같은 방법을 시도했다. 결과 결과 = neo4jTemplate.query ("시작 n = 노드 (11) 반환 ID (n), n.name, n.age;", null) 목록 list = result.collect {new User (it) } 두 가지 방법으로 내 요구 사항을 충족시킬 수 있습니다. 결국 감사드립니다. –

+2

다음과 같이 사용할 수도 있습니다 :'result.to (User.class) .as (List.class)' –