日志

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

 来源    2020-05-23    1  

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

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

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

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

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

1.Hibernate :

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

2.OpenJPA

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.最简单的方法

public void testNativeQuery() {
        EntityManager entityManager = SpringUtil.getBean(EntityManager.class);
        Query q = entityManager.createNativeQuery("select * from table1",java.util.Map.class);
        List<Map<String, Object>> list = q.getResultList();
        for (Map m : list) {
            System.out.println(m);
        }
    }
相关文章
java – 如何使用jpa project eclipse在实体类中生成唯一约束
问答我打算在我的项目中集成ORM,所以我使用eclipse的JPA项目从旧数据库中生成实体类.在生成的总共168个实体类中,它很好.但是在像nullable这样的一些约束中,unique不会自动生成. 例 ...
1
java – JPA:查询根据实体类中定义的外键值获取结果?
问答Netbean 6.9从此SQL Server 2008表生成以下JPA实体类: 我想获得具有特定SKU值的所有ProductDescriptors.像这样的东西: SELECT * FROM Pro ...
2
java – 用JPA 2.0编程加载实体类?
问答使用Hibernate可以将您的Entity类加载为: sessionFactory = new AnnotationConfiguration() .addPackage("test.an ...
IntelliJ IDEA 2017版 spring-boot 实现jpa基本部署,通过实体类自动建立数据库
日志一.添加Spring Boot JPA-Hibernate步骤       1.在pom.xml添加mysql,spring-data-jpa依赖      2.在application.proper ...
1
c# – 如何在不使用过时的OracleConnection类的情况下建立OracleConnection
问答什么是建立OraConnection的"新"方式? Microsoft将几个类定义为过时的. https://msdn.microsoft.com/en-us/library/sy ...
visual-studio-2012 – 如何在没有实体框架的情况下使用OData
问答我有兴趣使用visual studio 2012创建OData wcf数据服务.但是我不想使用实体模型框架,而是使用我的方案少nosql数据集来存储和检索数据. 是否有一种方法可以让我控制odata服 ...
2
c# – 我可以在没有实体框架的情况下使用LINQ吗?
问答我正在使用一个使用3层方法的旧应用程序,但是与数据库的连接仅通过连接字符串进行,并且数据通过sql存储过程进行操作. 是否可以在不添加ADO.NET实体模型的情况下使用LINQ?::LINQ本身可以在 ...
1
ios – 目标C运行测试时:在未指定基类的情况下定义类
问答我不知道发生了什么,因为我对目标c和IOS开发相当新. 当我尝试运行我的测试时,使用默认测试框架我收到以下错误: ..../Pods/Expecta/src/matchers/EXPMatchers+ ...
1
单元测试 – 如何在不重构单独的类的情况下对私有代码进行单元测试?
问答假设我有一个执行一些计算的私有例程: private function TCar.Speed: float { Result = m_furlogs * 23; } 但现在我想开始更彻底地测试这个计算 ...
1
java – JPA 2 Criteria API不区分大小写的情况下不区分大小写的情况
问答如何在没有元模型使用的情况下创建不区分大小写的条件查询? 我正在尝试做这样的事情: CriteriaBuilder builder = entityManager.getCriteriaBuilder ...
1
在没有中间类的情况下将数据插入JavaFX TableView
问答我是新手Java程序员. 我想将ResultSet数据插入JavaFX TableView,但我不会使用中间类.我可以将ResultSet行作为对象插入TableView行吗? 这是我使用中间类Uni ...
1
c# – 在不使用.Net Core MVC中的DTO类的情况下,在POST API中传递多个参数
问答我在我的web项目上有一个调用API的操作 [HttpPost] public async Task<IActionResult> ExpireSurvey(int id) { var t ...
1
为什么我收到此错误:警告:数据定义没有类型或存储类[默认情况下启用]?
问答#include <stdio.h> #include <stdlib.h> struct NODE { char* name; int val; struct NODE* n ...
1
是否可以在不修改Form类的情况下使用django-crispy-form FormHelper
问答为了保持一致性,我想在登录表单中使用crispy. 我正在使用'django.contrib.auth.views.login'而我只编写模板. 问题是{%crispy form%}不输出提交按钮或& ...
1
ruby-on-rails – 在不实例化类的情况下调用ruby方法
问答如果我在rails活动模型方法上调用一个方法,如下所示: class Foo < ActiveRecord::Base end Foo.first 我会回来第一个活跃的记录.我不必实例化该类. ...
如何在不使用类的情况下自动调整QLabel pixmap保持率?
问答我们正在使用PyQt和Qt Designer制作GUI.现在我们需要放置在QLabel中的图像(像素图)在调整窗口大小时很好地保持比例. 我一直在阅读其他问题/答案,但他们都使用扩展课程.由于我们在U ...
1
在给定实体ID的情况下,如何确定实体是否已存在于Hibernate会话缓存中?
问答我希望从数据库中有效地加载多个实体,同时利用休眠会话缓存(第一级缓存而不是第二级).我试图做类似以下的事情: List<T> getEntities(Class<T> claz ...
1
c# – Json.NET – 如何在不访问类的情况下从序列化中排除属性
问答我正在尝试使用Json.NET序列化一个类.这就是我现在所做的. public class AClass { // I don't have access to BClass public BClas ...
1
java – 在没有主类的情况下创建Jar库
问答今天我刚刚创建了一个Java库.我使用Main类创建它,因为IntelliJ IDEA 14要求我添加一个.但是我希望它是一个普通的库,没有任何Main类.是否可以从这样的项目创建一个jar文件,而没 ...
1
html – 只有在祖先不包含某个类的情况下才可以应用CSS吗?
问答说明: 我不是CSS专家,但我目前的尝试就是这个. div:not(.classToBeAvoid) *{ background-color:red; } 我用英文写的是- "将红色背景应用 ...
1