码迷,mamicode.com
首页 > 其他好文 > 详细

JPA EntityManager 在没有实体类的情况下返回Map

时间:2020-05-24 00:40:25      阅读:91      评论:0      收藏:0      [点我收藏+]

标签:支持   sql   span   set   alias   sys   实体   row   print   

JPA entityManager.createNativeQuery()执行原生的SQL,当我们查询结果没有对应的实体类时,query.getResultList()返回的是一个List<Object[]>,也就是说每行的数据被作为一个对象数组返回。常见的用法是这样的:

1 public void testNativeQuery(){
2     Query query = entityManager.createNativeQuery("select id, code,name from table1 ");
3     List<Object[]> rows = query.getResultList();
4     for (Object[] row : rows) {
5         System.out.println("id = " + row[0]+";code = " + row[1]+";name= " + row[2]);
6     }
7 }

  这样的返回值常常让我们不知道其对应关系,尤其是在执行select *的过程中。

  其实很多JPA的底层实现都是支持返回Map对象的。

  在实际应用过程中我们可以这样实现:

1.Hibernate :

1 public void testNativeQuery() {
2     Query q = entityManager.createNativeQuery("select * from table1");
3     // 将结果转化为 Map<key, value>
4     q.unwrap(org.hibernate.SQLQuery.class).setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);
5     List<Map<String, Object>> list = q.getResultList();
6     for (Map<String, Object> m : list) {
7         System.out.println(m);
8     }
9 }

2.OpenJPA

 1     public void testNativeQuery() {
 2         EntityManager entityManager = SpringUtil.getBean(EntityManager.class);
 3         Query q = entityManager.createNativeQuery("select * from table1");
 4         QueryImpl impl = q.unwrap(QueryImpl.class);
 5         impl.setResultTransformer(Map.class);
 6         List list = q.getResultList();
 7         for (Map m : list) {
 8             System.out.println(m);
 9         }
10     }

3.最简单的方法

1     public void testNativeQuery() {
2         EntityManager entityManager = SpringUtil.getBean(EntityManager.class);
3         Query q = entityManager.createNativeQuery("select * from table1",java.util.Map.class);
4         List<Map<String, Object>> list = q.getResultList();
5         for (Map m : list) {
6             System.out.println(m);
7         }
8     }

 

JPA EntityManager 在没有实体类的情况下返回Map

标签:支持   sql   span   set   alias   sys   实体   row   print   

原文地址:https://www.cnblogs.com/wynn-ni/p/12945116.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!