我运行JPA 2.0本机查询,如下所示:
Query query = em.createNativeQuery("SELECT NAME, SURNAME, AGE FROM PERSON");
List list = query.getResultList();
Run Code Online (Sandbox Code Playgroud)
现在list拥有查询返回的所有行.我可以迭代它们,但每个条目都在Object[]哪里:
- 在索引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");
Run Code Online (Sandbox Code Playgroud)
我需要这个,因为我执行的本机查询是动态的,我不知道SELECT子句中字段的顺序,所以我不知道id的查询将如下所示:
SELECT SURNAME, NAME, AGE FROM PERSON
Run Code Online (Sandbox Code Playgroud)
要么
SELECT AGE, NAME, SURNAME FROM PERSON
Run Code Online (Sandbox Code Playgroud)
甚至
SELECT AGE, SURNAME, NAME FROM PERSON
Run Code Online (Sandbox Code Playgroud) 我的 jpa 存储库界面中有一个查询。
@Query("select e.campaignId, e from CampaignCrTargetingProfile e where e.campaignId in :ids group by e.campaignId")
public Map<Integer, List<CampaignCrTargetingProfile>> findByCampaignIdIn(@Param("ids") Iterable<Integer> ids);
Run Code Online (Sandbox Code Playgroud)
CampaignId 是整数。
但是当我尝试执行这个查询时,我发现了一个异常。
Caused by: org.springframework.core.convert.ConverterNotFoundException: No converter found capable of converting from type java.lang.Integer to type java.util.Map<?, ?>
at org.springframework.core.convert.support.GenericConversionService.handleConverterNotFound(GenericConversionService.java:311) ~[spring-core-4.1.5.RELEASE.jar:4.1.5.RELEASE]
at org.springframework.core.convert.support.GenericConversionService.convert(GenericConversionService.java:192) ~[spring-core-4.1.5.RELEASE.jar:4.1.5.RELEASE]
at org.springframework.core.convert.support.ArrayToObjectConverter.convert(ArrayToObjectConverter.java:66) ~[spring-core-4.1.5.RELEASE.jar:4.1.5.RELEASE]
at org.springframework.core.convert.support.ConversionUtils.invokeConverter(ConversionUtils.java:35) ~[spring-core-4.1.5.RELEASE.jar:4.1.5.RELEASE]
... 192 common frames omitted
Run Code Online (Sandbox Code Playgroud)
是否可以按其字段摸索实体并将结果作为 Map 返回?如果不可能,是否有另一种方法可以制作类似的东西?