JPA entityManager.createNativeQuery()执行原生的SQL,当我们查询结果没有对应的实体类时,query.getResultList()返回的是一个List,也就是说每行的数据被作为一个对象数组返回。常见的用法是这样的:
1 public void testNativeQuery(){
Query query = entityManager.createNativeQuery("select id, code,name from table1 ");
List rows = query.getResultList();
for (Object[] row : rows) {
System.out.println("id = " + row[0]+";code = " + row[1]+";name= " + row[2]);
}
}
这样的返回值常常让我们不知道其对应关系,尤其是在执行select *的过程中。
其实很多JPA的底层实现都是支持返回Map对象的。
在实际应用过程中我们可以这样实现:
1.Hibernate :
1 public void testNativeQuery() {
Query q = entityManager.createNativeQuery("select * from table1");
// 将结果转化为 Map
q.unwrap(org.hibernate.SQLQuery.class).setResultTransformer(Transformers