2014-04-23 3 views
0

J'ai intégré avec succès un Play! Application Framework 2.2.2 avec spring-data-neo4j 3.Comment utiliser Neo4j RestAPI avec CypherResult en Java

Je dois maintenant incorporer un simple composant Java avec neo4j. J'utilise neo4j-rest-graphdb-2.0.1 dans mon nouveau projet. Question comme suit:

Avec spring-data-neo4j j'avais une classe de modèle utilisateur avec @NodeEntity et @TypeAlias ​​("_ User") annotations. Je pourrais donc exécuter une requête Cypher comme ceci:

@Query("MATCH (User:_User) WHERE User.network = {0} RETURN User") 
    Iterable<User> executeFilterTest(String filterValue); 

Et ce renverrait une liste de mes objets de classe modèle utilisateur que je peux itérer.

Mais maintenant, dans mon projet Java que je fais ceci:

RestAPI restAPI = new RestAPIFacade("http://localhost:7474/db/data","",""); 

    CypherResult theResult = restAPI.query("MATCH (User:User) WHERE User.userid = '" + id + "' RETURN User", new HashMap<String, Object>()); 

Je ne sais pas comment utiliser le CypherResult? Y a-t-il un moyen de renvoyer les mêmes objets du modèle User sous forme de liste comme je l'ai fait dans mon instance spring-data-neo4j?

Répondre

0

Le paramètre CypherResult renvoie les résultats de chiffrement, y compris les noeuds et les rels, en tant qu'élément d'itération des cartes.

Btw. vous devez utiliser les paramètres au lieu de concaténation de chaîne pour l'id:

RestAPI restAPI = new RestAPIFacade("http://localhost:7474/db/data","",""); 

... 
Map<String, Object> params = new HashMap<String, Object>(); 
params.put("id",id); 
CypherResult theResult = restAPI.query("MATCH (User:User) WHERE User.userid = {id} RETURN User", params); 
for (Node user : theResult.to(Node.class)) { 

} 

La méthode to() prend également des convertisseurs qui peuvent créer vos objets de résultat.

En général, je conseille d'utiliser le JDBC driver à la place de Java-Rest-Binding.

+0

suggèrent que le pilote JBDC est une meilleure option que la Java-Rest-Binding pour les applications non printanières dans l'ensemble - ou juste dans cette situation? – gmjordan

0

Je pense que vous auriez à écrire votre propre code de "mapping" qui prend le résultat de CypherResult et les transforme en une liste de POJOs. Je n'ai pas fait cela mais en regardant la liaison Neo4j REST que vous utilisez, c'est peut-être possible

Spring Data Neo4j a été conçu pour faciliter ce genre de choses. Cela dit, peut-être en utilisant QueryResult (au lieu de CypherResult) et l'une des surcharges/méthodes "to" (vous devrez probablement écrire votre propre ResultConverter, etc.). Dans le pire des cas, vous devrez traduire les résultats manuellement dans vos POJO.

Ceci est basé sur la dernière liaison, btw.

Encore une fois, je n'ai pas essayé tout cela mais c'est peut-être un point de départ. J'aimerais savoir ce que vous finissez par trouver!