官方文档

https://docs.spring.io/spring-data/jpa/docs/1.11.16.RELEASE/reference/html/#repositories.special-parameters

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时候遇见的困难点的更多相关文章

  1. 21个写SQL的好习惯,你值得拥有

    前言 每一个好习惯都是一笔财富,本文分SQL后悔药, SQL性能优化,SQL规范优雅三个方向,分享写SQL的21个好习惯,谢谢阅读,加油哈~ 公众号:捡田螺的小男孩 1. 写完SQL先explain查 ...

  2. Java开发者写SQL时常犯的10个错误

        首页 所有文章 资讯 Web 架构 基础技术 书籍 教程 我要投稿 更多频道 » - 导航条 - 首页 所有文章 资讯 Web 架构 基础技术 书籍 教程 我要投稿 更多频道 » - iOS ...

  3. (摘至)程序员老鸟写sql语句的经验之谈

    做管理系统的,无论是bs结构的还是cs结构的,都不可避免的涉及到数据库表结构的设计,sql语句的编写等.因此在开发系统的时候,表结构设计是否合理,sql语句是否标准,写出的sql性能是否优化往往会成为 ...

  4. Java 程序员在写 SQL 时常犯的 10 个错误

    Java程序员编程时需要混合面向对象思维和一般命令式编程的方法,能否完美的将两者结合起来完全得依靠编程人员的水准: 技能(任何人都能容易学会命令式编程) 模式(有些人用“模式-模式”,举个例子,模式可 ...

  5. 程序员老鸟写sql语句的经验之谈

    做管理系统的,无论是bs结构的还是cs结构的,都不可避免的涉及到数据库表结构的设计,sql语句的编写等.因此在开发系统的时候,表结构设计是否合理,sql语句是否标准,写出的sql性能是否优化往往会成为 ...

  6. 写sql语句注意事项

    做管理系统的,无论是bs结构的还是cs结构的,都不可避免的涉及到数据库表结构的设计,sql语句的编写等.因此在开发系统的时候,表结构设计是否合理,sql语句是否标准,写出的sql性能是否优化往往会成为 ...

  7. 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 ...

  8. Oracle数据库之开发PL/SQL子程序和包

    Oracle数据库之开发PL/SQL子程序和包   PL/SQL块分为匿名块与命名块,命名块又包含子程序.包和触发器. 过程和函数统称为PL/SQL子程序,我们可以将商业逻辑.企业规则写成过程或函数保 ...

  9. 前端要革命?看我在js里写SQL

    在日新月异的前端领域中,前端工程师能做的事情越来越多,自从nodejs出现后,前端越来越有革了传统后端命的趋势,本文就再补一刀,详细解读如何在js代码中执行标准的SQL语句 为什么要在js里写SQL? ...

随机推荐

  1. idea 修改pom文件jdk版本回退问题解决

    在Java开发是我们大多都使用集成开发环境,像idea和eclipse用的都比较多,在使用idea maven构建项目时,在修改pom.xml文件时,我们的项目jdk版本都会回退,还得每次去设置中修改 ...

  2. Git复习(八)之快速理解Git结构

      git pull:拉取远程服务器最新代码到本地(会自动merge) git add:将本地代码添加到暂存区 git commit:将暂存区的所有内容提交到当前分支(git会自动为我们创建第一个分支 ...

  3. 07 Nginx负载均衡

    1.负载均衡的实现. 1.准备三台虚拟机,比如 192.168.119.146 提供资源 192.168.119.147 提供nginx的负载均衡 192.168.119.148 提供资源 2.分别配 ...

  4. node + express搭建api项目

    express框架 描述 express是一个保持最小规模的灵活的 Node.js Web 应用程序开发框架,为 Web 和移动应用程序提供一组强大的功能. 安装 // 1.使用npm淘宝镜像--cn ...

  5. html2canvas+Canvas2Image分享海报功能踩坑

    首先需要 import html2canvas from 'html2canvas'; import {Canvas2Image} from '../../assets/js/plug/canvas2 ...

  6. 基于 docker容器搭建机器学习环境

    下载docker镜像 docker pull ubuntu:18.04 进入ubuntu系统命令 docker run -ti ubuntu /bin/bash 正确退出系统方式 先按,ctrl+p ...

  7. 超详细思路讲解SQL语句的查询实现,及数据的创建。

    最近一直在看数据库方面的问题,总结了一下SQL语句,这是部分详细的SQL问题,思路讲解: 第一步:创建数据库表,及插入数据信息 --Student(S#,Sname,Sage,Ssex) 学生表 CR ...

  8. hdfs 配置文件详解

    – dfs.name.dir – NameNode 元数据存放位置 – 默认值:使用core-site.xml中的hadoop.tmp.dir/dfs/name – dfs.block.size –  ...

  9. .Net Framework4.5中Asp.net mvc使用Singal R轮训实现导入进度条功能

    .Net Framework4.5中Asp.net mvc使用Singal R轮训实现导入进度条功能 我的项目需求是:在.net4.5中用mvc5实现上传xml文件,后台实时导入数据库时传到前台进度, ...

  10. 26、Nginx Uwsgi代理

    1.Uwsgi代理基本概述 cgi.fastcgi.wsgi.uwsgi python框架 Django是一个开放源代码的web的框架 Flask是一个使用python编写的轻量级web应用框架 2 ...