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

解決springdataJPA對原生sql支持的問題

 更新時間:2021年06月11日 10:06:23   作者:WangXiaoYuuuuu  
這篇文章主要介紹了解決springdataJPA對原生sql支持的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

springdataJPA對原生sql支持問題

在項(xiàng)目中用到的是springdataJPA連接數(shù)據(jù)庫進(jìn)行操作,但是JPA中的hql語句不能夠滿足業(yè)務(wù)要求,因而需要用到原生sql

但是有一個問題:

  @Query(value = "SELECT ppd.* FROM  zt_productionplandetails AS ppd \n" +
            "       \tLEFT JOIN zt_salesplan  sp ON sp.id=ppd.salesPlan_id \n" +
            "         \tLEFT JOIN zt_employee  e ON e.id=ppd.employeeId\n" +
            "          \tWHERE ppd.enabled = TRUE \n" +
            "          \tAND ppd.`status`=1 \n" +
            "\tAND IF(:clientName !='', sp.clientName LIKE %:clientName%, 1 = 1 )\n" +
            "           \tAND IF( :productName !='', sp.productName LIKE %:productName%, 1 = 1 )\n" +
            "            \tAND IF( :empName != '', e.name LIKE %:empName%, 1 = 1 )\n" +
            "            \tAND IF( :startDate != '', DATE_FORMAT(ppd.createDate, '%Y-%m-%d %k:%i:%s' ) >=:startDate, 1 = 1 )\n" +
            "            \tAND IF( :endDate != '', DATE_FORMAT(ppd.createDate, '%Y-%m-%d %k:%i:%s' ) <=:endDate, 1 = 1 )"
            ,nativeQuery = true)
    Page<ProductionPlanDetails> findNewPlan(@Param("productName") String productName, @Param("empName") String empName, @Param("endDate") String endDate, @Param("startDate") String startDate, @Param("clientName") String clientName, Pageable pageable);

在用這個sql的時候,會報錯

java.sql.SQLSyntaxErrorException: Unknown column 'ppd' in 'field list'

意思就是找不到ppd的字段,可是這里明顯可以看出ppd是別名

后查看項(xiàng)目啟動查詢數(shù)據(jù)調(diào)用的sql為:

select count(ppd) FROM  zt_productionplandetails AS ppd 
        LEFT JOIN zt_salesplan  sp ON sp.id=ppd.salesPlan_id 
          LEFT JOIN zt_employee  e ON e.id=ppd.employeeId
           WHERE ppd.enabled = TRUE 
           AND ppd.`status`=1 
 AND IF(? !='', sp.clientName LIKE ?, 1 = 1 )
            AND IF( ? !='', sp.productName LIKE ?, 1 = 1 )
             AND IF( ? != '', e.name LIKE ?, 1 = 1 )
             AND IF( ? != '', DATE_FORMAT(ppd.createDate, '%Y-%m-%d %k:%i:%s' ) >=?, 1 = 1 )
             AND IF( ? != '', DATE_FORMAT(ppd.createDate, '%Y-%m-%d %k:%i:%s' ) <=?, 1 = 1 )

這里就發(fā)現(xiàn)了問題所在,在項(xiàng)目執(zhí)行sql的時候,查詢的是count(ppd),查詢文檔得知默認(rèn)情況下,jpa會在執(zhí)行查詢sql的時候會加上count()

所以做以下修改:

@Query(value = "SELECT ppd.* FROM  zt_productionplandetails AS ppd \n" +
            "       \tLEFT JOIN zt_salesplan  sp ON sp.id=ppd.salesPlan_id \n" +
            "         \tLEFT JOIN zt_employee  e ON e.id=ppd.employeeId\n" +
            "          \tWHERE ppd.enabled = TRUE \n" +
            "          \tAND ppd.`status`=1 \n" +
            "\tAND IF(:clientName !='', sp.clientName LIKE %:clientName%, 1 = 1 )\n" +
            "           \tAND IF( :productName !='', sp.productName LIKE %:productName%, 1 = 1 )\n" +
            "            \tAND IF( :empName != '', e.name LIKE %:empName%, 1 = 1 )\n" +
            "            \tAND IF( :startDate != '', DATE_FORMAT(ppd.createDate, '%Y-%m-%d %k:%i:%s' ) >=:startDate, 1 = 1 )\n" +
            "            \tAND IF( :endDate != '', DATE_FORMAT(ppd.createDate, '%Y-%m-%d %k:%i:%s' ) <=:endDate, 1 = 1 )",
            countQuery = "SELECT count(*) FROM  zt_productionplandetails AS ppd \n" +
            "            \tLEFT JOIN zt_salesplan  sp ON sp.id=ppd.salesPlan_id \n" +
            "            \tLEFT JOIN zt_employee  e ON e.id=ppd.employeeId\n" +
            "            \tWHERE ppd.enabled = TRUE \n" +
            "            \tAND ppd.`status`=1 \n" +
            "\tAND IF(:clientName !='', sp.clientName LIKE %:clientName%, 1 = 1 )\n" +
            "            \tAND IF( :productName !='', sp.productName LIKE %:productName%, 1 = 1 )\n" +
            "            \tAND IF( :empName != '', e.name LIKE %:empName%, 1 = 1 )\n" +
            "            \tAND IF( :startDate != '', DATE_FORMAT(ppd.createDate, '%Y-%m-%d %k:%i:%s' ) >=:startDate, 1 = 1 )\n" +
            "            \tAND IF( :endDate != '', DATE_FORMAT(ppd.createDate, '%Y-%m-%d %k:%i:%s' ) <=:endDate, 1 = 1 )"
            ,nativeQuery = true)

加上countQuery參數(shù)

解決問題~

Spring Data JPA 寫原生sql語句

在使用 Spring Data JPA 的時候,通常我們只需要繼承 JpaRepository 就能獲得大部分常用的增刪改查的方法。有時候我們需要自定義一些查詢方法,可以寫自定義 HQL 語句

但是在使用 Spring Data JPA 的時候,通常我們只需要繼承 JpaRepository 就能獲得大部分常用的增刪改查的方法。有時候我們需要自定義一些查詢方法,可以寫自定義 HQL 語句

@Query(value = "自定義sql語句", nativeQuery = true)
List<Long> findFriendsByUserId(Long userId);

如上,只需在查詢語句后邊加上nativeQuery = true 就可以了

以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 詳解Spring Boot 定制HTTP消息轉(zhuǎn)換器

    詳解Spring Boot 定制HTTP消息轉(zhuǎn)換器

    本篇文章主要介紹了詳解Spring Boot 定制HTTP消息轉(zhuǎn)換器,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-11-11
  • Java二維數(shù)組與動態(tài)數(shù)組ArrayList類詳解

    Java二維數(shù)組與動態(tài)數(shù)組ArrayList類詳解

    這篇文章主要給大家介紹了關(guān)于Java二維數(shù)組與動態(tài)數(shù)組ArrayList類的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • Java異常類型以及處理實(shí)例詳解

    Java異常類型以及處理實(shí)例詳解

    在程序設(shè)計(jì)中,進(jìn)行異常處理是非常關(guān)鍵和重要的一部分,一個程序的異常處理框架的好壞直接影響到整個項(xiàng)目的代碼質(zhì)量以及后期維護(hù)成本和難度,這篇文章主要給大家介紹了關(guān)于Java異常類型以及處理的相關(guān)資料,需要的朋友可以參考下
    2021-07-07
  • Java語言中的自定義類加載器實(shí)例解析

    Java語言中的自定義類加載器實(shí)例解析

    這篇文章主要介紹了Java語言中的自定義類加載器實(shí)例解析,分享了相關(guān)代碼示例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下
    2018-02-02
  • Spring條件注解@ConditionnalOnClass的原理分析

    Spring條件注解@ConditionnalOnClass的原理分析

    這篇文章主要介紹了Spring條件注解@ConditionnalOnClass的原理分析,所謂@ConditionalOnClass注解,翻譯過來就是基于class的條件,它為所標(biāo)注的類或方法添加限制條件,當(dāng)該條件的值為true時,其所標(biāo)注的類或方法才能生效,需要的朋友可以參考下
    2023-12-12
  • Java設(shè)計(jì)模式中單一職責(zé)原則詳解

    Java設(shè)計(jì)模式中單一職責(zé)原則詳解

    這篇文章主要介紹了Java設(shè)計(jì)模式中單一職責(zé)原則詳解,單一職責(zé)原則 (SRP) 是軟件設(shè)計(jì)中的一個重要原則,它要求每個類只負(fù)責(zé)一個職責(zé),需要的朋友可以參考下
    2023-05-05
  • java實(shí)現(xiàn)的冒泡排序算法示例

    java實(shí)現(xiàn)的冒泡排序算法示例

    這篇文章主要介紹了java實(shí)現(xiàn)的冒泡排序算法,結(jié)合實(shí)例形式分析了冒泡排序算法的具體操作步驟與實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2017-01-01
  • Spring基于Aop實(shí)現(xiàn)事務(wù)管理流程詳細(xì)講解

    Spring基于Aop實(shí)現(xiàn)事務(wù)管理流程詳細(xì)講解

    這篇文章主要介紹了Spring基于Aop實(shí)現(xiàn)事務(wù)管理流程,事務(wù)管理對于企業(yè)應(yīng)用來說是至關(guān)重要的,即使出現(xiàn)異常情況,它也可以保證數(shù)據(jù)的一致性,感興趣想要詳細(xì)了解可以參考下文
    2023-05-05
  • 通過Java 程序獲取Word中指定圖片的坐標(biāo)位置

    通過Java 程序獲取Word中指定圖片的坐標(biāo)位置

    本文介紹通過Java程序獲取Word文檔中指定圖片的坐標(biāo)位置,程序運(yùn)行環(huán)境是jdk1.8開發(fā)環(huán)境idea,通過java程序代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2021-05-05
  • IDEA2022 提示更新 TKK失敗請檢查網(wǎng)絡(luò)連接的問題

    IDEA2022 提示更新 TKK失敗請檢查網(wǎng)絡(luò)連接的問題

    這篇文章主要介紹了IDEA2022 提示:更新 TKK 失敗,請檢查網(wǎng)絡(luò)連接,本文給大家分享解決方案,對idea2022提示更新TKK失敗感興趣的朋友跟隨小編一起看看吧
    2022-11-11

最新評論