我有這樣的sql查詢,作業得很好
SELECT ppd. userId, AVG(Coalesce(sm.core, 0) AS avgScore
FROM Table1 ppd
LEFT JOIN Table2 sm ON ppd.userId = sm. userId AND sm.created BETWEEN start and end
WHERE ppd.someId IN (listOfIds)
GROUP BY ppd. userId ORDER BY avgScore DESC LIMIT 1 OFFSET 0;
我為JPARepository中的一個方法寫了一個查詢,看起來像下面的內容
@Query(value = "SELECT ppd.userId, AVG(Coalesce(sm.score, 0)) AS avgScore"
" FROM Table1 ppd "
" LEFT JOIN Table2 sm ON sm.userId = ppd.userId AND sm.created BETWEEN :start and :end"
" WHERE ppd.someId IN (:IdList) GROUP BY ppd.userId" ,
nativeQuery = true)
Page<MyDtoProjection> getAvg(@Param("IdList") List<String> IdList,
@Param("start") Long start,
@Param("end") Long end,
pageable可頁)。)
除了當pageable大小為1的時候,這和預期的作業一樣(限制1的SQL查詢作業正常)。 對于pageable引數,該服務發送了以下pageable物件
。Sort sort = JpaSort. unsafe(Sort.Direction.ASC, "(avgScore)")。
Pageable pageable = PageRequest.of(offset, limit, sort)。
該請求設定offset=0,limit=1
我從使用資源庫代碼的請求中收到的錯誤是這個。"欄位串列 "中的未知列 "ppd"。
查詢是:select count(ppd)...,我不知道為什么它把別名ppd作為列名,另外,我從另一個帖子中讀到,這種執行本地查詢的方式執行計數(在錯誤資訊中可以看到,我沒有指定那個計數查詢),可以通過設定countQuery引數來指定,但我不確定該怎么寫。
uj5u.com熱心網友回復:
解決它>。 剛剛把countQuery添加到@Query注解中,我不太確定在那里放什么,但很簡單
@Query(value = "SELECT ppd.userId, AVG(Coalesce(sm.score, 0))。AS avgScore"
" FROM Table1 ppd "
" LEFT JOIN Table2 sm ON sm.userId = ppd.userId AND sm.created BETWEEN :start and :end"
" WHERE ppd.someId IN (:IdList) GROUP BY ppd.userId" ,
countQuery = "SELECT COUNT(ppd.userId) FROM Table1 ppd"
"WHERE ppd.userId IN (:IdList) GROUP BY ppd.userId"。
nativeQuery = true)
Page<MyDtoProjection> getAvg(@Param("IdList") List< String> IdList,
@Param("start") Long start,
@Param("end") Long end,
pageable可頁)。)
這是我發現的唯一一個在答案中提到countQuery和它如何作業的帖子,如果有人正在經歷同樣的情況,去看看吧 Spring Data 和 Native Query with pagination
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/317513.html
標籤:
