使用Spring Data Jpa遇到问题汇总

栏目: Java · 发布时间: 6年前

内容简介:用于记录我在使用spring data jpa时遇到的各种问题及其解决方案只需要在方法上加上注解@Query即可,默认使用HQL如下: NetworkInfo是对应的实体类如需要使用数据库的SQL语句,则需要在@Query注解内加上 nativeQuery=true如 @Query(value="xxx",nativeQuery=true) 如下:

用于记录我在使用spring data jpa时遇到的各种问题及其解决方案

自定义查询语句(@Query 与 nativeQuery)

只需要在方法上加上注解@Query即可,默认使用HQL如下: NetworkInfo是对应的实体类

@Query("SELECT count(n.network) FROM NetworkInfo n where network=?1")
 Long countDeviceNumByNetwork(String network);
复制代码

如需要使用数据库的 SQL 语句,则需要在@Query注解内加上 nativeQuery=true如 @Query(value="xxx",nativeQuery=true) 如下:

@Query(value = "SELECT network_type,count(network_type) as count FROM network_manage WHERE network = ?1 " +
            "and TIMESTAMPDIFF(YEAR,(CASE WHEN DATE(in_net_date) is NULL THEN " +
            "CONCAT(in_net_date,'/01/01') ELSE in_net_date END),NOW())>=?2 GROUP BY network_type", nativeQuery = true)
    List<Object[]> countDeviceNumInNetDateMoreThanYEARSIntGroupByNetworkType(String network, int years);
复制代码

返回自定义查询对象(如"select new Map(xx,xx,xx)")

可以在注解里使用HQL来返回自定义对象 例子如: @Query("select new XXX(XX)") 默认返回的Map是以序号为key(如0,1,2) 样例:

@Query("SELECT new Map(manufacturer,networkType,count(manufacturer)) FROM NetworkInfo WHERE network = ?1 " +
            "GROUP BY manufacturer,networkType")
    List<Map<String, Object>> countDeviceNumGroupByManufacturerAndNetworkType(String network);
复制代码

若是使用nativeQuery默认返回一条记录为Object[] 样例见上面自定义查询语句

字段映射相关问题

字段命名解析

我使用spring boot + spring data jpa时,默认的表名映射规则是遇到大写(比如aAaAa),则将大写字母替换为下划线+小写字母(a_aa_aa). 一般 JAVA 中的变量命名规范都符合驼峰式,此时数据库遇到一个字段"portDesc",而我的实体类的变量名也为portDesc,此时就会将这个portDesc解析为"port_desc"然后就会报错. 我查了两种解决方法 1.最方便的解决方案是给字段加上@Column(name="portdesc") (前提是你的数据库大小写不敏感?) 2.还有更改解析策略的方式(spring boot配置):

spring.jpa.hibernate.naming.physical-strategy = org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
复制代码

但是使用了这种方式会让默认的驼峰解析成下划线的规则失效.

字段类型解析

使用映射时,我遇到了text,longtext,set等字段类型,使用默认的映射规则时报了错,无法直接使用String获取. 解决方案@Column(columnDefinition="XXX").


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

汇编语言(第2版)

汇编语言(第2版)

王爽 / 清华大学出版社 / 2008-4 / 33.00元

《汇编语言(第2版)》是各种CPU提供的机器指令的助记符的集合,人们可以用汇编语言直接控制硬件系统进行工作。汇编语言是很多相关课程(如数据结构、操作系统、微机原理等)的重要基础。为了更好地引导、帮助读者学习汇编语言,作者以循序渐进的思想精心创作了《汇编语言(第2版)》。《汇编语言(第2版)》具有如下特点:采用了全新的结构对课程的内容进行组织,对知识进行最小化分割,为读者构造了循序渐进的学习线索;在......一起来看看 《汇编语言(第2版)》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器