最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

springdataJPA對原生sql支持問題

在項目中用到的是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是別名

后查看項目啟動查詢數(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)了問題所在,在項目執(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)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • SpringBoot整合EasyExcel實現(xiàn)Excel表格導(dǎo)出功能

    SpringBoot整合EasyExcel實現(xiàn)Excel表格導(dǎo)出功能

    這篇文章主要介紹了SpringBoot整合EasyExcel實現(xiàn)Excel表格導(dǎo)出功能,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的朋友可以參考一下
    2022-07-07
  • java實現(xiàn)聯(lián)機五子棋

    java實現(xiàn)聯(lián)機五子棋

    這篇文章主要為大家詳細(xì)介紹了java實現(xiàn)聯(lián)機五子棋,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • Java中關(guān)于字符串的編碼方式

    Java中關(guān)于字符串的編碼方式

    這篇文章主要介紹了Java中關(guān)于字符串的編碼方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • java基于雙向環(huán)形鏈表解決丟手帕問題的方法示例

    java基于雙向環(huán)形鏈表解決丟手帕問題的方法示例

    這篇文章主要介紹了java基于雙向環(huán)形鏈表解決丟手帕問題的方法,簡單描述了丟手帕問題,并結(jié)合實例形式給出了Java基于雙向環(huán)形鏈表解決丟手帕問題的步驟與相關(guān)操作技巧,需要的朋友可以參考下
    2017-11-11
  • java事件處理模型知識點總結(jié)

    java事件處理模型知識點總結(jié)

    在本篇文章里小辮給大家分享的是一篇關(guān)于java事件處理模型知識點總結(jié)內(nèi)容,有興趣的朋友們可以學(xué)習(xí)下。
    2021-01-01
  • Ribbon的饑餓加載(eager-load)模式解讀

    Ribbon的饑餓加載(eager-load)模式解讀

    這篇文章主要介紹了Ribbon的饑餓加載(eager-load)模式解讀,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • MyBatis 執(zhí)行動態(tài) SQL語句詳解

    MyBatis 執(zhí)行動態(tài) SQL語句詳解

    大家對mybatis執(zhí)行任意sql語句都了解,那么MyBatis執(zhí)行動態(tài)SQL語句呢?下面腳本之家小編給大家解答下mybatis執(zhí)行動態(tài)sql語句的方法,非常不錯,感興趣的朋友參考下吧
    2016-08-08
  • Spring Boot項目搭建的兩種方式

    Spring Boot項目搭建的兩種方式

    springboot簡單快捷方便的優(yōu)點深受用戶喜愛,springboot開發(fā)環(huán)境搭建過程是每個開發(fā)者必須要做的工作,今天小編寫的一篇教程關(guān)于Spring Boot項目搭建方法,通過兩種方式給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2021-06-06
  • 詳解Java Callable接口實現(xiàn)多線程的方式

    詳解Java Callable接口實現(xiàn)多線程的方式

    這篇文章主要介紹了詳解Java Callable接口實現(xiàn)多線程的方式,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • java制作復(fù)制文件工具代碼分享

    java制作復(fù)制文件工具代碼分享

    如果目標(biāo)位置沒有同名文件,則直接拷貝過去;如果目標(biāo)位置已有同名文件,則比對文件的最后修改日期,來進(jìn)行覆蓋或者忽略。程序會在可以在復(fù)制過程中自動創(chuàng)建目錄,并生成log文件,創(chuàng)建了哪些目錄、文件,覆蓋了哪些文件、跳過了哪些文件,文件的時間、位置等信息都一目了然
    2014-01-01

最新評論

莲花县| 扎赉特旗| 铜梁县| 鹿邑县| 景谷| 上虞市| 永定县| 靖安县| 邹平县| 和政县| 平陆县| 金昌市| 仁化县| 桐乡市| 博客| 读书| 邯郸县| 从江县| 湖口县| 东城区| 册亨县| 东光县| 民县| 贺兰县| 张家口市| 东兰县| 松溪县| 镇原县| 乐至县| 固阳县| 合江县| 西乌| 荔浦县| 南澳县| 祁连县| 台州市| 怀集县| 平遥县| 满洲里市| 宁晋县| 班玛县|