简体   繁体   English

在JPA本机查询中可分页

[英]Pageable in JPA native query

I want to use pagination with a native query. 我想对本机查询使用分页。 I use for this this syntaxe as in this example : Spring Data and Native Query with pagination 我在此示例中使用此语法: 带有分页的Spring数据和本机查询

and it's my query: 这是我的查询:

@Query(value="SELECT rownum() as RN, users.num, users .l_service,service.type_service, users.date, " +
        "chambre.price," +
        "price* ( case when(datediff(day,date_d,date_f)=0) then 1 " +
        "else datediff(day,date_d,date_f) end ) as Montant," +
        "case when  (service.type_service='R') and  datediff(day,date_d,date_f) >=21 " +
        "then (21300+(datediff(day,date_d,date_f)-21)*200)" +
        "else price*(case when(datediff(day,date_d,date_f)=0) then 1 else datediff(day,date_d,date_f)end) end AS Montant_final " +
        " users.year, users.Etat, " +
        " from chambre JOIN users ON chambre.code = users.type " +
        "JOIN service on service.code = users.l_service " +
        " WHERE users.Etat='V' and RN between ?#{ #pageable.offset -1} and ?#{#pageable.offset + #pageable.pageSize order by users.num",
        countQuery ="select count(*) from users ",nativeQuery = true)
Page<Object> getStatistiques(Pageable pageable);

I get this error : 我收到此错误:

Cannot mix JPA positional parameters and native Hibernate positional/ordinal parameters 无法混合JPA位置参数和本地Hibernate位置/常规参数

This is the solution I found to my problem: 这是我发现问题的解决方案:

@Query(value="SELECT * from (SELECT ROW_NUMBER() OVER (ORDER BY users.num) as RN, users.num, users .l_service,service.type_service, users.date, " +
    "chambre.price," +
    "price* ( case when(datediff(day,date_d,date_f)=0) then 1 " +
    "else datediff(day,date_d,date_f) end ) as Montant," +
    "case when  (service.type_service='R') and  datediff(day,date_d,date_f) >=21 " +
    "then (21300+(datediff(day,date_d,date_f)-21)*200)" +
    "else price*(case when(datediff(day,date_d,date_f)=0) then 1 else datediff(day,date_d,date_f)end) end AS Montant_final " +
    " users.year, users.Etat, " +
    " from chambre JOIN users ON chambre.code = users.type " +
    "JOIN service on service.code = users.l_service " +
    " WHERE users.Etat='V') AS STA where RN between ?#{ #pageable.offset -1} and ?#{#pageable.offset + #pageable.pageSize} order by STA.num",
    countQuery ="select count(*) from users ",nativeQuery = true) 
    Page<Object> getStatistiques(Pageable pageable);

I share it with you perhaps it can help someone else! 我与您分享,也许可以帮助其他人!

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM