JPA 2.0 本机查询结果作为地图 [英] JPA 2.0 native query results as map
问题描述
我像这样运行 JPA 2.0 本机查询:
I run a JPA 2.0 native query like this:
Query query = em.createNativeQuery("SELECT NAME, SURNAME, AGE FROM PERSON");
List list = query.getResultList();
现在 list
具有查询返回的所有行.我可以遍历它们,但每个条目都是一个 Object[]
其中:
now list
has all the rows returned by the query. I can iterate over them, but every entry is an Object[]
where:
- 在索引 0 处找到 NAME
- 在索引 1 我找到 SURNAME
- 在索引 3 处,我找到了 AGE
有没有人找到一种方法来做这样的事情:
Did anyone find a way to do something like this:
Map<String, Object> row = list.get(index);
String name = row.get("NAME");
String surname = row.get("SURNAME");
Integer age = row.get("AGE");
我需要这个,因为我执行的本机查询是一个动态查询,我不知道 SELECT 子句中字段的顺序,所以我不知道查询看起来像:
I would need this since the native query that I execute is a dynamic one and I don't know the order of the field in SELECT clause, so I don't know id the query will look like:
SELECT SURNAME, NAME, AGE FROM PERSON
或
SELECT AGE, NAME, SURNAME FROM PERSON
甚至
SELECT AGE, SURNAME, NAME FROM PERSON
推荐答案
您使用的是哪种 JPA - Hibernate、EclipseLink 或其他什么?
Which JPA are you using - Hibernate, EclipseLink or something else?
在 JPA 中没有执行此操作的标准方法,但您的特定实现可能允许 - 例如,Eclipselink 具有查询结果类型提示.
There is no standard way to do this in JPA but your specific implementation may allow it - for example, Eclipselink has a query result type hint.
http://dev.eclipse.org/mhonarc/lists/eclipselink-users/msg03013.html
Query query = entityManager.createNativeQuery(sql);
query.setHint(QueryHints.RESULT_TYPE, ResultType.Map);
对于 Hibernate,使用 javax.persistence.Query dbQuery:
For Hibernate, with javax.persistence.Query dbQuery:
org.hibernate.Query hibernateQuery =((org.hibernate.jpa.HibernateQuery)dbQuery)
.getHibernateQuery();
hibernateQuery.setResultTransformer(AliasToEntityMapResultTransformer.INSTANCE);
这篇关于JPA 2.0 本机查询结果作为地图的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!