Jpa数据操作以及@Query和@Modifying注解使用
一、 Jpa接口自定义sql注解@Query
@Query注解,使用注解有两种方式,一种是JPQL的SQL语言方式,一种是原生SQL的语言,略有区别,代码中具体区别是nativeQuery 属性是否为true,我们一般使用的都是原生SQL的语言,需要加nativeQuery = true
- 不带参数的sql
@Query(value = "select count(1) code,hdt.type data from history_design_theme hdt where 1=1 GROUP BY hdt.type",nativeQuery = true)List<DataCodeDTO> findHistoryType();
- 一般带参数简单例子
@Query(value = "select * from history where hdt.type=?1 ",nativeQuery = true)List<HistoryDesignTheme> findAllData(String type);
- 带参@Param注解注入参数
@Query(value = "select * from sys_role sr where sr.role_id in(:idList) and sr.state=:state ",nativeQuery = true)List<SysRole> findAllByRoleIdInAndState(@Param(value = "idList") List<Long> idList, @Param(value = "state") Long state);
@Modifying注解
@Query注解只有对数据查询的操作,如果你需要进行对数据的修改那就必须使用@Modifying注解。
JPA 在 EntityManager 中缓存了 find 生成的对象,而@Query 跟 find 和 save 系列方法是两套不同的体系,@Query 引起的数据库变更 EntityManager 并不能发现,更进一步说,使用其它工具或者其它框架修改数据库中的数据,也不能及时反应到 JPA 的 find 系列方法上来。
解决方法就是:一是避免使用@Query并显示清理EntityManager中的缓存,二是Spring Data JPA 提供了另外一种方式则是 @Modifying(clearAutomatically = true),@Modifying 的 clearAutomatically 属性为 true 时,执行完 modifying query 之后就会清理缓存。
自动清理之后还会带来一个新的问题,clear 操作清理的缓存中,还包括提交后未 flush 的数据,例如调用 save 而不是 saveAndFlush 就有可能不会立即将修改内容更新到数据库中,在 save 之后 flush 之前调用 @Modifying(clearAutomatically = true) 修饰的方法就有可能导致修改丢失。如果再要解决这个问题,还可以再加上另外一个属性 @Modifying(clearAutomatically = true, flushAutomatically = true),@Modifying 的 flushAutomatically 属性为 true 时,执行 modifying query 之前会先调用 flush 操作,从而避免数据丢失问题。
Jpa数据操作以及@Query和@Modifying注解使用相关推荐
- SpringData @Query和@Modifying注解原理解析
@Query注解查询适用于所查询的数据无法通过关键字查询得到结果的查询.这种查询可以摆脱像关键字查询那样的约束,将查询直接在相应的接口方法中声明,结构更为清晰,这是Spring Data的特有实现. ...
- mysql jpa 批注 视图_通过JPA注解映射视图的实体类 jpa 视图 无主键 @Query注解的用法(Spring Data JPA) jpa 使用sql语句...
参考: https://blog.csdn.net/qq465235530/article/details/68064074 https://www.cnblogs.com/zj0208/p/6008 ...
- JPA:@Modifying注解(UPDATE或者DELETE)
通过 @Modifying 注解可以完成修改(UPDATE或者DELETE)操作(注意:不支持新增) SpringDataJpa--JpaRepository增删改查(请参考):http://blog ...
- @Query注解及@Modifying注解
@Query注解查询适用于所查询的数据无法通过关键字查询得到结果的查询.这种查询可以摆脱像关键字查询那样的约束,将查询直接在相应的接口方法中声明,结构更为清晰,这是Spring Data的特有实现. ...
- springData中的@Query注解及@Modifying注解
@Query注解 @Query注解查询适用于所查询的数据无法通过关键字查询得到结果的查询.这种查询可以摆脱像关键字查询那样的约束,将查询直接在相应的接口方法中声明,结构更为清晰,这是Spring Da ...
- JPA @Modifying注解 jpql语句更新以及删除
JPA @Modifying注解解释 这个注解在JPA中经常出现,是为了通知jpa,这是一个update或者delete操作,在更新或者删除操作时,此注解必须加,否则就会抛出异常,注:jpa不支持in ...
- @Query与@Modifying执行更新操作
@Query与@Modifying执行更新操作 @Query 与 @ Modifying 这 两 个 annotation 一起声明,可定义个性化更新操作,例如只涉及某些字段更新时最为常用,示例如下: ...
- JPA学习笔记---JPA数据的操作:增加,删除,修改,获取,使用JPQL进行查询
JPA学习笔记---JPA数据的操作:增加,删除,修改,获取,使用JPOL进行查询 创梦技术交流平台:资源下载,技术交流,网络赚钱: 交流qq群:1群:248318056 2群:251572072 技 ...
- Spring Boot + JPA +MySQL 数据操作及示例环境搭建(自动建表)
JPA 是Java官方提供的数据持久的统一API , 是一个接口标准,并没有具体实现. JPA的实现常见的有: Hibernate TopLink (Eclipse Link) Spring Boot ...
最新文章
- 【Go】Go基础(六):数组、切片slice、映射map
- cmd查看python安装路径-从cmd如何查找python的安装路径?
- Win7下使用U盘安装linux Ubuntu16.04双系统图文教程
- 合成孔径雷达算法与实现_[SAR笔记0]合成孔径雷达成像算法与实现
- KubeSphere配置集(ConfigMap)的使用
- 【服务器】【私有云】宝塔安装KodExplorer
- 论文阅读笔记(五)——FD-MOBILENET
- Precision、Recall、F计算:举例
- java 修饰词_Java线程和Java修饰词
- Android系统架构
- 2015计算机二级office真题,2015年计算机二级office题库及答案
- Winform2、(C#) 设置编译后.exe执行文件的图标
- 在C++程序中使用系统热键(附代码)
- 自学Python第二十天- MongoDB 库
- 安卓ios和java如何选_在android和iOS之间选择novi编程
- Python爬取《明日之子》(腾讯视频)评论和弹幕,看看大家都在吐槽什么
- 后端返回一个下载Excel表格的url,要PC浏览器打开下载,前端代码设计
- WiFi未来趋势如何?如何搭上物联网这条大船?
- 有些段子,外行人根本看不懂,只有程序员看了会狂笑不止
- 发展型机器人:由人类婴儿启发的机器人. 2.3 类人婴儿机器人
热门文章
- java bytebuffer 读写_java io byteBuffer
- react项目报出警告Warning: Cannot update during an existing state transition (such as within `render`).
- Wireshark 解密 RDP 流量
- hdu6740 MUV LUV EXTRA
- 新冠肺炎疫情引发空前应用需求,Dynatrace助企业轻松应对
- 机器人公敌过获奖没有_我机器人(机械公敌2)什么时候上映
- Centos7 静默安装 Oracle RAC 11gR2
- android密码sha256解密,使用password_hash和SHA256加密和解密
- 计算机在英语课中的应用 博客,英语课堂教学的信息技术运用与反思
- 使用vite打包时候遇到的坑