【问题标题】:Hibernate Neo4j retrieve result in a key-value formHibernate Neo4j 以键值形式检索结果
【发布时间】:2018-03-02 18:47:21
【问题描述】:

我想以如下格式检索实体属性:property_name: value

我正在尝试以这种方式获得结果:

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(); 
      }
   }

我在某处读到查询返回的对象是托管实体。

我希望结果是这样的:{"firstname":"Jon", "lastname":"Smith"}

我找到了这个setResultTransformer(AliasToEntityMapResultTransformer.INSTANCE,这可能是我正在寻找的东西,但我无法让它工作。

有没有办法做到这一点?

【问题讨论】:

    标签: java hibernate neo4j hibernate-ogm hibernate-native-query


    【解决方案1】:

    尝试将您的查询更改为:

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

    【讨论】:

    • 这很好用。我得到这样的结果 [{firstname=Jon, lastname=Smith}] 。之后我可以将此数组转换为正确的 JSON。
    • @Porjaz 试试这个技巧:MATCH (p:Person {id:3}) RETURN collect({ firstname: p.firstname, lastname: p.lastname })[0]
    • 它仍然以相同的格式提供它们[{firstname=Jon, lastname=Smith}]
    • @Porjaz 这可能与您的 Java 代码转换查询结果的方式有关。我建议你问一个关于它的新问题。
    • 问题不大。我可以编写代码将其转换为正确的 json。非常感谢您的帮助
    【解决方案2】:

    如果您正在寻找作为实体的返回值,这将起作用:

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

    实际上,在这种情况下,这会更有意义:

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

    【讨论】:

    • 我认为这不是我想要的。我正在尝试返回子图(家谱),因此查询很大。这就是为什么我需要返回每个人的名字、姓氏、关系、relationship_property 等。Bruno Peres 的查询以我正在寻找的接近方式返回数据。它返回[{firstname=Jon, lastname=Smith}]。理想情况下,返回的结果最好是 json 格式
    • Hibernate OGM 目前不支持 ResultTransformers,我为它创建了一个问题:hibernate.atlassian.net/browse/OGM-1328
    猜你喜欢
    • 2020-02-27
    • 1970-01-01
    • 1970-01-01
    • 2011-07-15
    • 1970-01-01
    • 2017-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多