JPA 开发写SQL时候遇见的困难点
官方文档
1.根据时间排序时候查询遇见的错误
No property desc found for type Date!
出错前写法
findAllOrderByCreateTimeDesc
修改后写法
findAllByOrderByCreateTimeDesc
参考文档:
https://stackoverflow.com/questions/19733464/order-by-date-asc-with-spring-data
2.JPA自定义sql注意
@Query
使用自定义sql报错:
Validation failed for query for method public abstract
解决方法如下:
必须全是对象的值包括查询条件或者:
原生sql必须加nativeQuery=true
@Query(value = "select count(1) from collect_orders o where o.tier_two_seller_id=?1",nativeQuery=true)
Long queryAllOrderCount(Long id);
3.JPA保存数据的一些坑
当调用JPA的save方法时候如果没有为id设置自增的时候就会报错:
ids for this class must be manually assigned before calling save()
解决办法:
必须在主键get方法上要加上
@GeneratedValue(strategy = GenerationType.AUTO)
或
@GeneratedValue(strategy = GenerationType.IDENTITY)
4.JPA其他一些操作 保存数据 修改数据
参考博客:地址
SpringDataJpa进行修改数据库操作有两种方式:
一、调用保存实体的方法
1、保存一个实体:repository.save(T entity)
2、保存多个实体:repository.save(Iterable<T> entitys)
3、保存一个实体并立即刷新更改:repository.saveAndFlush(T entity)
注意事项:保存对象时需要确定 PRIMARY KEY和唯一索引。否则会报出“Duplicate entry '1-2-0' for key”这样的错误。
修改对象时,也使用如上方法,但需要确定PRIMARY KEY,如果PRIMARY KEY不存在,则是添加操作。
二、@Query注解(写JPQL语句)
JPQL( Java 持久性查询语言)JPQL 和 SQL 的主要区别在于,前者处理JPA 实体、属性,后者直接在数据库空间内对表、列、行等关系数据进行处理。
JPQL解释:https://blog.csdn.net/qq_33746131/article/details/56479226
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.transaction.annotation.Transactional;
Repositoryk中@Query写JPQL语句:@Query("JPQL语句")
例1 修改操作
@Modifying
@Transactional
@Query("update CityStationGoods csg set csg.isOnsale = ?2 where csg.id = ?1")
int updateOnSaleState(int id, Boolean isOnsale);
例2 使用参数下标
@Modifying
@Transactional
@Query("delete from GoodsActivity ga where ga.activityId = ?1")
void deleteByActivityId(Integer activityId);
例3 使用参数名
@Modifying
@Transactional
@Query("delete from GoodsActivity ga where ga.activityId = :id")
void deleteByActivityId(@Param(value = "id")Integer activityId);
Repositoryk中@Query写SQL语句:@Query(value="SQL语句",nativeQuery = true)
例1
@Query(value = "SELECT IFNULL(SUM(num),0) FROM shopping_cart WHERE member_id =?1", nativeQuery = true)
int getCartNum(Integer memberId);
注意事项:查询时不需要@Modifying注解。@Modifying:指示方法应被视为修改查询。
@Transactional注解:在update或delete时,需要事务提交。如果不写Transactional无法将修改后的操作保存到数据库中。该注解可以写在Service或Repository中。(本例因测试学习,写到了Repository中)
JPA 开发写SQL时候遇见的困难点的更多相关文章
- 21个写SQL的好习惯,你值得拥有
前言 每一个好习惯都是一笔财富,本文分SQL后悔药, SQL性能优化,SQL规范优雅三个方向,分享写SQL的21个好习惯,谢谢阅读,加油哈~ 公众号:捡田螺的小男孩 1. 写完SQL先explain查 ...
- Java开发者写SQL时常犯的10个错误
首页 所有文章 资讯 Web 架构 基础技术 书籍 教程 我要投稿 更多频道 » - 导航条 - 首页 所有文章 资讯 Web 架构 基础技术 书籍 教程 我要投稿 更多频道 » - iOS ...
- (摘至)程序员老鸟写sql语句的经验之谈
做管理系统的,无论是bs结构的还是cs结构的,都不可避免的涉及到数据库表结构的设计,sql语句的编写等.因此在开发系统的时候,表结构设计是否合理,sql语句是否标准,写出的sql性能是否优化往往会成为 ...
- Java 程序员在写 SQL 时常犯的 10 个错误
Java程序员编程时需要混合面向对象思维和一般命令式编程的方法,能否完美的将两者结合起来完全得依靠编程人员的水准: 技能(任何人都能容易学会命令式编程) 模式(有些人用“模式-模式”,举个例子,模式可 ...
- 程序员老鸟写sql语句的经验之谈
做管理系统的,无论是bs结构的还是cs结构的,都不可避免的涉及到数据库表结构的设计,sql语句的编写等.因此在开发系统的时候,表结构设计是否合理,sql语句是否标准,写出的sql性能是否优化往往会成为 ...
- 写sql语句注意事项
做管理系统的,无论是bs结构的还是cs结构的,都不可避免的涉及到数据库表结构的设计,sql语句的编写等.因此在开发系统的时候,表结构设计是否合理,sql语句是否标准,写出的sql性能是否优化往往会成为 ...
- Red Gate系列之三 SQL Server 开发利器 SQL Prompt 5.3.4.1 Edition T-SQL智能感知分析器 完全破解+使用教程
原文:Red Gate系列之三 SQL Server 开发利器 SQL Prompt 5.3.4.1 Edition T-SQL智能感知分析器 完全破解+使用教程 Red Gate系列之三 SQL S ...
- Oracle数据库之开发PL/SQL子程序和包
Oracle数据库之开发PL/SQL子程序和包 PL/SQL块分为匿名块与命名块,命名块又包含子程序.包和触发器. 过程和函数统称为PL/SQL子程序,我们可以将商业逻辑.企业规则写成过程或函数保 ...
- 前端要革命?看我在js里写SQL
在日新月异的前端领域中,前端工程师能做的事情越来越多,自从nodejs出现后,前端越来越有革了传统后端命的趋势,本文就再补一刀,详细解读如何在js代码中执行标准的SQL语句 为什么要在js里写SQL? ...
随机推荐
- C++ 类类型转换函数explicit 关键字
标准数据之间会进行 隐式类型安全转换. 转换规则: 隐式类型转换的问题: #include <iostream> #include <string> using namesp ...
- Git复习(十二)之命令专场
命令 git init -> 初始化一个git仓库 git clone -> 克隆一个本地库 git pull -> 拉取服务器最新代码 git fetch –p -> 强行拉 ...
- 关于获取jquery对象的长度
/* 17:10 2019/8/6 @author zhangxingshuo jQuery:"write less, do more" homepage: https://jqu ...
- Linux Exploit系列之四 使用return-to-libc绕过NX bit
使用return-to-libc绕过NX bit 原文地址:https://bbs.pediy.com/thread-216956.htm 这篇讲解的比较好,主要的问题是获得system地址和exit ...
- 为SourceInsight添加多行注释功能菜单
由于项目看代码主要使用的是Source Insight,习惯了其他编辑器的多行注释功能,对此感到很不习惯,查询网上程序,可以自行添加. 1.打开project,选择base项目中的utils.em,添 ...
- Elasticsearch没看文档之前,整理的一些知识
1 基础 index -> 数据库 type -> 表 document -> 行 field -> 列 ----------------------------------- ...
- js中 base64 转二进制
function base64toBlob(base64,type) { // 将base64转为Unicode规则编码 let bstr = atob(base64, type), n = bstr ...
- 享元模式<Flyweight Pattern>
1.What-是什么? 享元模式是一种轻量级的结构型模式.旨在以共享的方式高效的支持大量的细粒度对象的复用.要求能够共享的对象必须是细粒度对象,这些对象比较相似,状态变化小. 2.Why-为什么? ...
- 第一篇、Python入门
一 编程与编程语言 python是一门编程语言,作为学习python的开始,需要事先搞明白:编程的目的是什么?什么是编程语言?什么是编程? 编程的目的: #计算机的发明,是为了用机器取代/解放人力,而 ...
- git push 到 github
今天来简单整理一下,如何利用git命令把代码提交到GitHub平台上去,当然要提交代码到GitHub上去,您首先得要有GitHub账号,账号如何申请这里就不多做解释了 第一步:先到官网下载git安装包 ...