JPA 2.0 本机查询结果作为地图

2024-03-11

我运行 JPA 2.0 本机查询,如下所示:

Query query = em.createNativeQuery("SELECT NAME, SURNAME, AGE FROM PERSON");
List list = query.getResultList();

now list包含查询返回的所有行。我可以迭代它们,但每个条目都是一个Object[] where:

  • 在索引 0 处我找到 NAME
  • 在索引 1 处我找到 SURNAME
  • 在索引 3 处我找到 AGE

有没有人找到一种方法来做这样的事情:

Map<String, Object> row = list.get(index);
String name = row.get("NAME");
String surname = row.get("SURNAME");
Integer age = row.get("AGE");

我需要这个,因为我执行的本机查询是动态查询,并且我不知道 SELECT 子句中字段的顺序,所以我不知道查询的 id 看起来像:

SELECT SURNAME, NAME, AGE FROM PERSON

or

SELECT AGE, NAME, SURNAME FROM PERSON

or even

SELECT AGE, SURNAME, NAME FROM PERSON

您使用哪种 JPA - Hibernate、EclipseLink 还是其他?

在 JPA 中没有标准方法可以执行此操作,但您的特定实现可能允许这样做 - 例如,Eclipselink 有一个查询结果类型提示。

http://dev.eclipse.org/mhonarc/lists/eclipselink-users/msg03013.html 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:

org.hibernate.Query hibernateQuery =((org.hibernate.jpa.HibernateQuery)dbQuery)
.getHibernateQuery();
hibernateQuery.setResultTransformer(AliasToEntityMapResultTransformer.INSTANCE);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JPA 2.0 本机查询结果作为地图 的相关文章

随机推荐