在我的代码中,我Set<Map.Entry<K, V>>从地图创建了一个.现在我想重新创建相同的地图表单,所以我想将其HashSet<Map.Entry<K, V>>转换为HashMap<K, V>.Java是否有本机调用,或者我是否必须遍历set元素并手动构建映射?
我运行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) 通常我们将查询编写为
@Query("SELECT a FROM Foo a WHERE a.someId = :id")
Map<Long, Foo> findAllBySomeId(Long id)
Run Code Online (Sandbox Code Playgroud)
有没有办法让HashMap而不是List.
我想要Hashmap的key = someId和Value为Foo的键.
我试过这样的
@Query("SELECT new map (a.someId, a) FROM Foo a WHERE a.someId = :id")
Map<Long, Foo> findAllBySomeIdAsMap(Long id);
Run Code Online (Sandbox Code Playgroud)
但它返回了两个项目,但a.someId为Value,键为0;
0=someId
1=Foo
Run Code Online (Sandbox Code Playgroud) 这是我的查询
select SUM(d.day) as totalDay, SUM(d.month) as totalMonth from record d where d.userId = ?1
Integer getRecod(Long id);
Run Code Online (Sandbox Code Playgroud)
由于查询未返回整数,因此发生错误。我应该用整数替换什么?