1

Je voudrais récupérer les propriétés de l'entité dans un format comme celui-ci: property_name: value.Hibernate Neo4j récupérer le résultat dans un formulaire de valeur-clé

Je suis en train d'obtenir le résultat de cette façon:

public void retrievePerson(){ 
    EntityManagerFactory emf = Persistence.createEntityManagerFactory("persistence"); 
    EntityManager em = emf.createEntityManager(); 
    EntityTransaction tx = em.getTransaction(); 
    tx.begin(); 
     try{ 

     String query = "MATCH (p:Person {id:3}) RETURN p.firstname, p.lastname"; 

     List<Object[]> person = (List<Object[]>) em.createNativeQuery(query).getResultList(); 

     em.flush(); 
     tx.commit(); 
     em.clear(); 
     em.close(); 
     emf.close(); 

     } 
     catch (HibernateException e) { 
     if (tx!=null) tx.rollback(); 
     e.printStackTrace(); 
     } 
    } 

J'ai lu quelque part l'objet retourné par la requête est une entité gérée.

Je voudrais que le résultat soit comme ceci: {"firstname":"Jon", "lastname":"Smith"}

J'ai trouvé ce setResultTransformer(AliasToEntityMapResultTransformer.INSTANCE qui pourrait être quelque chose que je cherche, mais je suis incapable de le faire fonctionner.

Existe-t-il un moyen d'y parvenir?

Répondre

0

Essayez de changer votre requête:

MATCH (p:Person {id:3}) 
RETURN { firstname: p.firstname, lastname: p.lastname } 
+0

Cela fonctionne très bien. J'obtiens un résultat comme ceci '[{prénom = Jon, nom = Smith}]'. Je peux convertir ce tableau en JSON approprié par la suite. – Porjaz

+0

@Porjaz Essayez cette astuce: 'MATCH (p: Personne {id: 3}) RETURN recueillir ({prénom: p.firstname, nom: p.lastname}) [0]' –

+0

Il leur donne toujours dans le même format '[{firstname = Jon, last = Smith}]' – Porjaz

0

Si vous êtes à la recherche de la valeur retournée à une entité, cela fonctionnera:

String query = "MATCH (p:Person {id:3}) RETURN p"; 
List<Person> person = (List<Person>) em.createNativeQuery(query, Person.class).getResultList(); 

En fait, dans ce cas, cela rendrait plus sens:

Person poem = (Person) em.createNativeQuer(query, Person.class).getSingleResult(); 
+0

Je pense que ce n'est pas tout à fait ce que je cherche. J'essaie de retourner un sous-graphe (un arbre généalogique) donc la requête est assez grande. C'est pourquoi je dois retourner le prénom, le nom de famille, la relation, la relation, la propriété de chaque personne, etc. La requête de Bruno Peres retourne les données d'une manière proche de ce que je cherchais. Il a retourné '[{firstname = Jon, lastname = Smith}]'. Idéalement, il serait préférable que le résultat renvoyé puisse être au format json. – Porjaz

+0

Hibernate OGM ne supporte pas actuellement ResultTransformers, j'ai créé un problème pour cela: https://hibernate.atlassian.net/browse/OGM-1328 – Davide