jpa 原生sql 查询返回一个实体_JPA EntityManager 在没有实体类的情况下返回Map

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.ALIAS_TO_ENTITY_MAP);

List> list = q.getResultList();

for (Map m : list) {

System.out.println(m);

}

}

2.OpenJPA

1 public void testNativeQuery() {

EntityManager entityManager = SpringUtil.getBean(EntityManager.class);

Query q = entityManager.createNativeQuery("select * from table1");

QueryImpl impl = q.unwrap(QueryImpl.class);

impl.setResultTransformer(Map.class);

List list = q.getResultList();

for (Map m : list) {

System.out.println(m);

}

}

3.最简单的方法

1 public void testNativeQuery() {

EntityManager entityManager = SpringUtil.getBean(EntityManager.class);

Query q = entityManager.createNativeQuery("select * from table1",java.util.Map.class);

List> list = q.getResultList();

for (Map m : list) {

System.out.println(m);

}

}

b739ec46bb5c46d9c0aa4ce35ba1ea56.png

关于找一找教程网

本站文章仅代表作者观点,不代表本站立场,所有文章非营利性免费分享。

本站提供了软件编程、网站开发技术、服务器运维、人工智能等等IT技术文章,希望广大程序员努力学习,让我们用科技改变世界。

[JPA EntityManager 在没有实体类的情况下返回Map]http://www.zyiz.net/tech/detail-136931.html


版权声明:本文为weixin_35834687原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。