Java Hibernate Neo4j以键值形式检索结果
我希望以如下格式检索实体属性:Java Hibernate Neo4j以键值形式检索结果,java,hibernate,neo4j,hibernate-ogm,hibernate-native-query,Java,Hibernate,Neo4j,Hibernate Ogm,Hibernate Native Query,我希望以如下格式检索实体属性:property\u name:value 我试图通过以下方式获得结果: public void retrievePerson(){ EntityManagerFactory emf = Persistence.createEntityManagerFactory("persistence"); EntityManager em = emf.createEntityManager(); EntityTransaction tx = em.ge
property\u 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();
}
}
public void retrievePerson(){
EntityManagerFactory emf=Persistence.createEntityManagerFactory(“Persistence”);
EntityManager em=emf.createEntityManager();
EntityTransaction tx=em.getTransaction();
tx.begin();
试一试{
String query=“MATCH(p:Person{id:3})返回p.firstname,p.lastname”;
List person=(List)em.createNativeQuery(query.getResultList();
em.flush();
tx.commit();
em.clear();
em.close();
emf.close();
}
捕获(休眠异常e){
如果(tx!=null)tx.rollback();
e、 printStackTrace();
}
}
我在某处读到,查询返回的对象是一个托管实体
我希望结果如下:{“firstname”:“Jon”,“lastname”:“Smith”}
我找到了这个setResultTransformer(别名ToEntityMapResultTransformer.INSTANCE
,这可能是我正在寻找的东西,但我无法让它工作
有没有办法做到这一点?尝试将查询更改为:
MATCH (p:Person {id:3})
RETURN { firstname: p.firstname, lastname: p.lastname }
尝试将查询更改为:
MATCH (p:Person {id:3})
RETURN { firstname: p.firstname, lastname: p.lastname }
如果您希望返回的值是一个实体,这将起作用:
String query = "MATCH (p:Person {id:3}) RETURN p";
List<Person> person = (List<Person>) em.createNativeQuery(query, Person.class).getResultList();
如果您希望返回的值是一个实体,这将起作用:
String query = "MATCH (p:Person {id:3}) RETURN p";
List<Person> person = (List<Person>) em.createNativeQuery(query, Person.class).getResultList();
这很好。我得到的结果是这样的:
[{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。非常感谢您的帮助。这很好。我得到的结果如下[{firstname=Jon,lastname=Smith}]
之后我可以将这个数组转换成一个正确的JSON。@Porjaz试试这个技巧:MATCH(p:Person{id:3})RETURN collect({firstname:p.firstname,lastname:p.lastname})[0]
它仍然以相同的格式给出它们@Porjaz这可能与您的Java代码转换查询结果的方式有关。我建议您就此提出一个新问题。这不是什么大问题。我可以编写一个代码将其转换为正确的json。非常感谢您的帮助。我想这不是我想要的。我正在尝试返回一个子图(家谱)所以查询非常大。这就是为什么我需要返回每个人的名字、姓氏、关系、关系属性等。Bruno Peres的查询以我所寻找的接近的方式返回数据。它返回[{firstname=Jon,lastname=Smith}]
。理想情况下,如果返回的结果可以是json格式,那就最好了Hibernate OGM目前不支持ResultTransformers,我为此提出了一个问题:我认为这不是我想要的。我正在尝试返回一个子图(族谱树)所以查询非常大。这就是为什么我需要返回每个人的名字、姓氏、关系、关系属性等等。Bruno Peres的查询以我所寻找的接近的方式返回数据。它返回[{firstname=Jon,lastname=Smith}]
。理想情况下,如果返回的结果可以是json格式,那就最好了Hibernate OGM目前不支持ResultTransformers,我为它创建了一个问题: