欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Jpa數據操作以及@Query和@Modifying注解使用方式

 更新時間:2024年07月17日 09:12:32   作者:hippoDocker  
這篇文章主要介紹了Jpa數據操作以及@Query和@Modifying注解使用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

Jpa接口自定義sql注解@Query

@Query注解,使用注解有兩種方式:

  • 一種是JPQL的SQL語言方式
  • 一種是原生SQL的語言

略有區(qū)別,

代碼中具體區(qū)別是nativeQuery 屬性是否為true,我們一般使用的都是原生SQL的語言,需要加nativeQuery = true

1.不帶參數的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();

2.一般帶參數簡單例子

 @Query(value = "select * from history where hdt.type=?1 ",nativeQuery = true)
    List<HistoryDesignTheme> findAllData(String type);

3.帶參@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);

4.@Modifying注解

@Query注解只有對數據查詢的操作,如果你需要進行對數據的修改那就必須使用@Modifying注解。

JPA 在 EntityManager 中緩存了 find 生成的對象,而@Query 跟 find 和 save 系列方法是兩套不同的體系,@Query 引起的數據庫變更 EntityManager 并不能發(fā)現,更進一步說,使用其它工具或者其它框架修改數據庫中的數據,也不能及時反應到 JPA 的 find 系列方法上來。

解決方法就是:

  • 一是避免使用@Query并顯示清理EntityManager中的緩存,
  • 二是Spring Data JPA 提供了另外一種方式則是
@Modifying(clearAutomatically = true)

@Modifying 的 clearAutomatically 屬性為 true 時,執(zhí)行完 modifying query 之后就會清理緩存。

自動清理之后還會帶來一個新的問題,clear 操作清理的緩存中,還包括提交后未 flush 的數據,

例如調用 save 而不是 saveAndFlush 就有可能不會立即將修改內容更新到數據庫中,在 save 之后 flush 之前調用 @Modifying(clearAutomatically = true) 修飾的方法就有可能導致修改丟失。

如果再要解決這個問題,還可以再加上另外一個屬性

@Modifying(clearAutomatically = true, flushAutomatically = true)

@Modifying 的 flushAutomatically 屬性為 true 時,執(zhí)行 modifying query 之前會先調用 flush 操作,從而避免數據丟失問題。

總結

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • java中BigDecimal的使用踩坑記錄

    java中BigDecimal的使用踩坑記錄

    這篇文章主要為大家詳細介紹了java中使用BigDecimal會踩坑的地方以及相關的解決方法,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2023-10-10
  • 獲取系統(tǒng)參數System.getProperties()與配置文件參數@Value(“${key}“)

    獲取系統(tǒng)參數System.getProperties()與配置文件參數@Value(“${key}“)

    這篇文章主要介紹了獲取系統(tǒng)參數System.getProperties()與配置文件參數@Value("${key}"),本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-05-05
  • Springboot maven plugin插件原理及作用

    Springboot maven plugin插件原理及作用

    這篇文章主要介紹了Springboot maven plugin插件原理及作用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-10-10
  • springboot動態(tài)定時任務的實現方法示例

    springboot動態(tài)定時任務的實現方法示例

    這篇文章主要給大家介紹了關于springboot動態(tài)定時任務的實現方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-02-02
  • SSH框架網上商城項目第7戰(zhàn)之整合Struts2和Json

    SSH框架網上商城項目第7戰(zhàn)之整合Struts2和Json

    SSH框架網上商城項目第7戰(zhàn)之整合Struts2和Json,打通EasyUI和Struts2之間的交互,感興趣的小伙伴們可以參考一下
    2016-05-05
  • RocketMQ NameServer保障數據一致性實現方法講解

    RocketMQ NameServer保障數據一致性實現方法講解

    這篇文章主要介紹了RocketMQ NameServer保障數據一致性實現方法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-12-12
  • SpringBoot啟動失敗的解決方法:A component required a bean of type ‘xxxxxxx‘ that could not be found.

    SpringBoot啟動失敗的解決方法:A component required a&nb

    這篇文章主要介紹了解決SpringBoot啟動失?。篈 component required a bean of type ‘xxxxxxx‘ that could not be found.,目前解決方法有兩種,一種是不注入bean的方式,另一種是使用@Component的方式,本文給大家詳細講解,需要的朋友可以參考下
    2023-02-02
  • Spring?Boot?Rest常用框架注解詳情簡介

    Spring?Boot?Rest常用框架注解詳情簡介

    這篇文章主要介紹了Spring?Boot?Rest常用框架注解,通過將嘗試解釋Spring?Boot?Rest?API的不同注釋,這些注釋是Spring?Boot中REST?API所必需的,需要的朋友可以參考一下
    2022-06-06
  • Mybatis延遲加載原理和延遲加載配置詳解

    Mybatis延遲加載原理和延遲加載配置詳解

    這篇文章主要介紹了Mybatis延遲加載原理和延遲加載配置詳解,MyBatis中的延遲加載,也稱為懶加載,是指在進行表的關聯查詢時,按照設置延遲規(guī)則推遲對關聯對象的select查詢,需要的朋友可以參考下
    2023-10-10
  • 快速搭建一個SpringBoot項目(純小白搭建教程)

    快速搭建一個SpringBoot項目(純小白搭建教程)

    本文主要介紹了快速搭建一個SpringBoot項目,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11

最新評論