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

解決springdataJPA對(duì)原生sql支持的問(wèn)題

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

springdataJPA對(duì)原生sql支持問(wèn)題

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

但是有一個(gè)問(wèn)題:

  @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);

在用這個(gè)sql的時(shí)候,會(huì)報(bào)錯(cuò)

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

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

后查看項(xiàng)目啟動(dò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)了問(wèn)題所在,在項(xiàng)目執(zhí)行sql的時(shí)候,查詢的是count(ppd),查詢文檔得知默認(rèn)情況下,jpa會(huì)在執(zhí)行查詢sql的時(shí)候會(huì)加上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ù)

解決問(wèn)題~

Spring Data JPA 寫(xiě)原生sql語(yǔ)句

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

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

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

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

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

相關(guān)文章

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

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

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

    java實(shí)現(xiàn)聯(lián)機(jī)五子棋

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

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

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

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

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

    java事件處理模型知識(shí)點(diǎn)總結(jié)

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

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

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

    MyBatis 執(zhí)行動(dòng)態(tài) SQL語(yǔ)句詳解

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

    Spring Boot項(xiàng)目搭建的兩種方式

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

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

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

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

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

最新評(píng)論

嘉定区| 威宁| 沈丘县| 阳江市| 大荔县| 禹城市| 玉门市| 甘谷县| 龙泉市| 台东市| 逊克县| 库尔勒市| 全椒县| 个旧市| 岢岚县| 咸宁市| 雅江县| 正蓝旗| 上高县| 江油市| 红原县| 东丰县| 西安市| 土默特右旗| 宜章县| 图们市| 固镇县| 云南省| 麦盖提县| 沾益县| 怀宁县| 元阳县| 青龙| 永城市| 清水县| 邹城市| 桂阳县| 那曲县| 金寨县| 社旗县| 郑州市|