JPA EntityManager 在没有实体类的情况下返回Map
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);
}
}
JPA EntityManager 在没有实体类的情况下返回Map的更多相关文章
- 条目二十一《总是让比较函数在等值情况下返回false》
条目二十一<总是让比较函数在等值情况下返回false> 这条目对序列容器是不适合的,因为序列容器就是通过等值判断来比较的. 对于关联容器来说,比较是等价比较,所以要注意等值的时候,比较子的 ...
- IntelliJ IDEA 2017版 spring-boot 实现jpa基本部署,通过实体类自动建立数据库
一.添加Spring Boot JPA-Hibernate步骤 1.在pom.xml添加mysql,spring-data-jpa依赖 2.在application.properties文件 ...
- Android--将实体类转化成Json和Map的基类
package com.newair.talk.base; import android.text.TextUtils; import com.google.gson.Gson; import jav ...
- JAVA 实体类List<Entity >转 List<Map>
public static <T extends IdEntity> List<Map<Object,Object>> EntityConvertMap(List& ...
- av_interleaved_write_frame 网络不好的情况下返回较慢
用libvlc做直播推流引擎在网络较差的情况下,需要关闭直播,并且重新开播.这个过程中,推流引擎重启,需要的是快速响应.实际上测试结果发现,经常会发生引擎关闭接口卡住.后来跟踪代码,定位到s_rtmp ...
- Spring整合JPA时,为实体类添加@Entity注解时提示The type MultipartEntity is deprecated
这个情况是由于导入错了Entity包所导致的. 按住Alt+T时,会有两个关于@Entity的提示 org.hibernate.annotations.Entity 和 javax.persisten ...
- springboot 使用JPA自动生成Entity实体类的方法
1. 2. 3.添加数据库 4. 5. 6. 7.点击OK完成. 8.去掉红色波浪线方法. 9.配置数据源 完成!
- 如何在有实体键的情况下全部显示ActionBar的Menu?
大伙都知道, 在老版本手机, 以及部分的新手机上都还残留实体键, 有了这些实体键, 默认菜单是用实体菜单键呼出的, 尽管你把android:showAsAction="always" ...
- Java类什么情况下被初始化?
1.创建类的实例(new 的方式).访问某个类或接口的静态变量,或者对该静态变量赋值,调用类的静态方法 2.反射的方式 3.当初始化一个类的时候,如果发现其父类还没有进行初始化,则需先触发其父类的初始 ...
随机推荐
- 【Linux常见命令】alias命令
alias命令用于查看和设置指令的别名. 用户可利用alias,自定指令的别名. 若仅输入alias,则可列出目前所有的别名设置. alias的效力仅及于该次登入的操作.若要每次登入是即自动设好别名, ...
- mac OS 安装 Node.js
打开Node.js官网https://nodejs.org/zh-cn/选择你需要的版本 下载安装 安装完成 输入命令 node -v 查看版本号 输入命令 npm -v 查看版本号
- JavaSE——装饰设计模式+简单加密解密工程
2019独角兽企业重金招聘Python工程师标准>>> 声明:本栏目所使用的素材都是凯哥学堂VIP学员所写,学员有权匿名,对文章有最终解释权:凯哥学堂旨在促进VIP学员互相学习的基础 ...
- python练习---博客登录(装饰器)
程序要求: 1),启动程序,首页面应该显示成如下格式: 欢迎来到博客园首页 1:请登录 2:请注册 3:文章页面 4:日记页面 5:评论页面 6:收藏页面 7:注销 8:退出程序2),用户输入选项,3 ...
- Pattern Matching
字符串模式匹配,即子串的定位操作.就是判断主串S中是否存在给定的子串,如果存在,那么返回子串在S中的位置,否则返回0. 实现这种操作有两种算法: 朴素的模式匹配算法 设主串S长度为n,子串T长度为m. ...
- 疯子的算法总结(九) 图论中的矩阵应用 Part 1+POJ3613 Cow Relays
图的存储有邻接矩阵,那么他就具备一些矩阵的性质,设有一个图的demo[100][100];那么demo[M][N]就是M—>N的距离,若经过一次松弛操作demo[M][N]=demo[M][K] ...
- 4)drf序列化组件 Serializer(偏底层)、ModelSerializer(重点)、ListModelSerializer(辅助群改)
知识点:Serializer(偏底层).ModelSerializer(重点).ListModelSerializer(辅助群改) 一.Serializer 偏底层 一般不用 理解原理 1.序列化准备 ...
- golang 容器的学习与实践
golang 提供了几个简单的容器供我们使用,本文在介绍几种Golang 容器的基础上,实现一个基于Golang 容器的LRU算法. 容器介绍 Golang 容器位于 container 包下,提供了 ...
- 前端——Vue CLI 3.x搭建Vue项目
一.Node安装 windows 1. Node.js (>=8.9, 推荐8.11.0+) Node官网下载 .msi 文件,按步骤下载安装即可. 安装完之后在cmd中输入 node -v,若 ...
- 使用Pandas读取CSV文件
使用Pandas读取CSV文件 import pandas as pd csv_data = pd.read_csv('birth_weight.csv') # 读取训练数据 print(csv_da ...