JPA 2.0 本机查询结果作为地图 [英] JPA 2.0 native query results as map

查看:27
本文介绍了JPA 2.0 本机查询结果作为地图的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我像这样运行 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆