рд╣реИрд▓реЛ, рдкреЗрдЬрд┐рдВрдЧ рдпрд╛ рд░реЗрдВрдЬ (рдПрд╕рдХреНрдпреВрдПрд▓ рдЕрдкрд╡рд╛рдж, рд╕рдВрджреЗрд╢ = 'рдЧрд▓рдд рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рдкрд╛рд╕'?'ред') рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдореБрдЭреЗ 1.0.0.CR9 рдореЗрдВ рдПрдордПрд╕ рдПрд╕рдХреНрдпреВрдПрд▓ рдХреНрд╡реЗрд░реА рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝ рд░рд╣рд╛ рд╣реИ, рд╕рдВрднрд╡рддрдГ рдХреНрдпреЛрдВрдХрд┐ рдкреИрд░рд╛рдореАрдЯрд░ рдЪрдпрди рдЦрдВрдб рдореЗрдВ рд╣реИ?
рд╕реНрдЯреИрдХ: рдХреНрд╡рд╛рд░реНрдХрд╕ 2.1.0ред рдлрд╛рдЗрдирд▓ / рдкреИрдирд╛рдЪреЗ рд░рд┐рдПрдХреНрдЯрд┐рд╡ / рд╡рд┐рджреНрд░реЛрд╣реА 4.1.2 / рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рд░рд┐рдПрдХреНрдЯрд┐рд╡ 1.0.0.CR9 / рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рдХреЛрд░ 5.5.5ред рдлрд╛рдЗрдирд▓
рдореЗрд░реЗ рдмрд╛рдХреА рд╕рдВрд╕рд╛рдзрди рд╕реЗ, рдЗрд╕реЗ рдЪрд▓рд╛ рд░рд╣рд╛ рд╣реИ:
[PanacheRepository].find("firstName LIKE ?1").page(Page.of(25)).list();
рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рдореЗрдВ SQL рд▓реЙрдЧрд┐рдВрдЧ рдХреЗ рд╕рд╛рде, рдпрд╣ рдЙрддреНрдкрд╛рджрд┐рдд SQL рд╣реИ:
Hibernate:
select
top(?) request0_.id as id1_1_,
request0_.caseId as caseid2_1_,
request0_.caseNumber as casenumb3_1_,
request0_.expires as expires4_1_,
request0_.addressLine1 as addressl5_1_,
request0_.addressLine2 as addressl6_1_,
request0_.agency as agency7_1_,
request0_.city as city8_1_,
request0_.email as email9_1_,
request0_.firstName as firstna10_1_,
request0_.lastName as lastnam11_1_,
request0_.phone as phone12_1_,
request0_.relationship as relatio13_1_,
request0_.state as state14_1_,
request0_.zipcode as zipcode15_1_,
request0_.submitted as submitt16_1_
from
Request request0_
where
request0_.firstName like <strong i="11">@P1</strong>
рдЬрд╣рд╛рдВ рдХреНрд▓реЙрдЬ рдореЗрдВ рд╕рд╣реА рдкреИрд░рд╛рдореАрдЯрд░ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ, рд▓реЗрдХрд┐рди рдЪрдпрди рдХреНрд▓реЙрдЬ рдореЗрдВ "рдЯреЙрдк (?)" рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдирд╣реАрдВ рд╣реБрдЖред
рдЕрдЧрд░ рдореИрдВ рдкреЗрдЬрд┐рдВрдЧ рдХреЛ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реВрдВ рдФрд░ рдлрд┐рд░ рд╕реЗ рдЪрд▓рд╛рддрд╛ рд╣реВрдВ, рддреЛ рдХреНрд╡реЗрд░реА рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрддреА рд╣реИред
рдиреАрдЪреЗ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рдЯреНрд░реЗрд╕ рд▓реЙрдЧрд┐рдВрдЧ, рдПрдЪрдХреНрдпреВрдПрд▓ рдФрд░ рдПрд╕рдХреНрдпреВрдПрд▓ рджрд┐рдЦрд╛ рд░рд╣рд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ Panache рдХреНрд╡реЗрд░реА рдкрд░ setMaxResults()
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИред рдХреНрд╡рд╛рд░реНрдХрд╕ рдпрд╛ рд╡рд┐рджреНрд░реЛрд╣ рдХреЗ рд╕рд╛рде рдПрдХ рдореБрджреНрджрд╛ рдЦреЛрд▓рдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реБрдИ рдЕрдЧрд░ рдпрд╣ рдореБрджреНрджрд╛ рд╣реИ, рдФрд░ рдЕрдЧреНрд░рд┐рдо рдзрдиреНрдпрд╡рд╛рдж!
2021-08-05 12:55:57,342 DEBUG [org.hib.hql.int.ast.QueryTranslatorImpl] (vert.x-eventloop-thread-1) HQL: FROM myproject.entities.Request WHERE requestor.firstName LIKE ?1
2021-08-05 12:55:57,342 DEBUG [org.hib.hql.int.ast.QueryTranslatorImpl] (vert.x-eventloop-thread-1) SQL: select request0_.id as id1_1_, request0_.caseId as caseid2_1_, request0_.caseNumber as casenumb3_1_, request0_.expires as expires4_1_, request0_.addressLine1 as addressl5_1_, request0_.addressLine2 as addressl6_1_, request0_.agency as agency7_1_, request0_.city as city8_1_, request0_.email as email9_1_, request0_.firstName as firstna10_1_, request0_.lastName as lastnam11_1_, request0_.phone as phone12_1_, request0_.relationship as relatio13_1_, request0_.state as state14_1_, request0_.zipcode as zipcode15_1_, request0_.submitted as submitt16_1_ from Request request0_ where request0_.firstName like ?
2021-08-05 12:55:57,342 DEBUG [org.hib.hql.int.ast.ErrorTracker] (vert.x-eventloop-thread-1) throwQueryException() : no errors
2021-08-05 12:55:57,342 TRACE [org.hib.rea.ses.imp.ReactiveHQLQueryPlan] (vert.x-eventloop-thread-1) Find: FROM myproject.entities.Request WHERE requestor.firstName LIKE ?1
2021-08-05 12:55:57,344 TRACE [org.hib.eng.spi.QueryParameters] (vert.x-eventloop-thread-1) Named parameters: {1=%j%}
2021-08-05 12:55:57,345 TRACE [org.hib.typ.des.sql.BasicBinder] (vert.x-eventloop-thread-1) binding parameter [2] as [VARCHAR] - [%j%]
2021-08-05 12:55:57,345 TRACE [org.hib.loa.Loader] (vert.x-eventloop-thread-1) Bound [3] parameters total
2021-08-05 12:55:57,355 DEBUG [org.hib.SQL] (vert.x-eventloop-thread-1)
select
top(?) request0_.id as id1_1_,
request0_.caseId as caseid2_1_,
request0_.caseNumber as casenumb3_1_,
request0_.expires as expires4_1_,
request0_.addressLine1 as addressl5_1_,
request0_.addressLine2 as addressl6_1_,
request0_.agency as agency7_1_,
request0_.city as city8_1_,
request0_.email as email9_1_,
request0_.firstName as firstna10_1_,
request0_.lastName as lastnam11_1_,
request0_.phone as phone12_1_,
request0_.relationship as relatio13_1_,
request0_.state as state14_1_,
request0_.zipcode as zipcode15_1_,
request0_.submitted as submitt16_1_
from
Request request0_
where
request0_.firstName like <strong i="18">@P1</strong>
2021-08-05 12:55:57,358 ERROR [org.hib.rea.errors] (vert.x-eventloop-thread-1) HR000057: Failed to execute statement [$1select request0_.id as id1_1_, request0_.caseId as caseid2_1_, request0_.caseNumber as casenumb3_1_, request0_.expires as expires4_1_, request0_.addressLine1 as addressl5_1_, request0_.addressLine2 as addressl6_1_, request0_.agency as agency7_1_, request0_.city as city8_1_, request0_.email as email9_1_, request0_.firstName as firstna10_1_, request0_.lastName as lastnam11_1_, request0_.phone as phone12_1_, request0_.relationship as relatio13_1_, request0_.state as state14_1_, request0_.zipcode as zipcode15_1_, request0_.submitted as submitt16_1_ from Request request0_ where request0_.firstName like @P1]: $2could not execute query: java.util.concurrent.CompletionException: io.vertx.mssqlclient.MSSQLException: {number=102, state=1, severity=15, message='Incorrect syntax near '?'.', serverName='aa3ae4a0fd3c', lineNumber=1, additional=[io.vertx.mssqlclient.MSSQLException: {number=8180, state=1, severity=16, message='Statement(s) could not be prepared.', serverName='aa3ae4a0fd3c', lineNumber=1}]}
рдЙрд╕ рдПрд╕рдХреНрдпреВрдПрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдЕрдЬреАрдм рд╣реИред
рд╣рдо рднреА рдХреНрдпреЛрдВ рдкреНрд░рдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ top n
рдХреЗ рдмрдЬрд╛рдп offset ... fetch ...
ред рдФрд░ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдХреЛрд╖реНрдардХ рдХреНрдпреЛрдВ?
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ Panache рдХреНрд╡реЗрд░реА рдкрд░
setMaxResults()
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИред
рдЕрдЪреНрдЫрд╛ рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред Panache рдХрд╛ рдХреЛрдИ рд╡реНрдпрд╡рд╕рд╛рдп рдирд╣реАрдВ рд╣реИ рдФрд░ рдЕрдкрдиреА рд╕реНрд╡рдпрдВ рдХреА SQL рдкреАрдврд╝реА рдХрд░ рд░рд╣рд╛ рд╣реИ, рдареАрдХ рд╣реИ @FroMage?
рдЦреИрд░ рдореИрдВрдиреЗ рдЗрд╕реЗ рд╕рд╛рджреЗ рдПрдЪрдЖрд░ рдореЗрдВ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рдФрд░ рдореБрдЭреЗ рдорд┐рд▓рддрд╛ рд╣реИ:
select hqlquerypa0_.id as id1_0_, hqlquerypa0_.description as descript2_0_, hqlquerypa0_.name as name3_0_, hqlquerypa0_.type as type4_0_ from Flour hqlquerypa0_ order by hqlquerypa0_.id offset <strong i="6">@P1</strong> rows fetch next <strong i="7">@P2</strong> rows only
рддреЛ рдореБрдЭреЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдкрдирд╛рдЪреЗ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╕рдорд╕реНрдпрд╛ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред
рд╕рдореАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХрд╛ рдмрд╣реБрдд-рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж рдФрд░ рдореИрдВ рд╕реНрдЯреИрдХ рдореЗрдВ рдХреБрдЫ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рддрдХ рдкрд╣реБрдВрдЪреВрдВрдЧрд╛ред рдЪреВрдВрдХрд┐ рдЯреНрд░реЗрд╕ рд▓реЙрдЧ рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рдПрдХрдорд╛рддреНрд░ рдПрдЪрдХреНрдпреВрдПрд▓ FROM myproject.entities.Request WHERE requestor.firstName LIKE ?1
, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ top(?)
рдХрд╛ рдЬреЛрдбрд╝ рдПрдордПрд╕ рдПрд╕рдХреНрдпреВрдПрд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реЗ setMaxResults()
рд▓рд┐рдП рдЖ рд░рд╣рд╛ рдерд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЖрдкрдХреА рдкреЛрд╕реНрдЯ рдореЗрдВ рдПрд╕рдХреНрдпреВрдПрд▓ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИред
рдЕрднреА рднреА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝ рд░рд╣рд╛ рд╣реИ, рдореИрдВрдиреЗ рдЗрд╕ рдПрдЪрдХреНрдпреВрдПрд▓ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрджреЗрд╢ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛: FROM myproject.entities.Request WHERE requestor.firstName LIKE ?1 ORDER BY submitted
2021-08-05 16:20:37,992 DEBUG [org.hib.hql.int.ast.QueryTranslatorImpl] (vert.x-eventloop-thread-19) HQL: FROM myproject.entities.Request WHERE requestor.firstName LIKE ?1 ORDER BY submitted
2021-08-05 16:20:37,992 DEBUG [org.hib.hql.int.ast.QueryTranslatorImpl] (vert.x-eventloop-thread-19) SQL: select request0_.id as id1_1_, request0_.caseId as caseid2_1_, request0_.caseNumber as casenumb3_1_, request0_.expires as expires4_1_, request0_.addressLine1 as addressl5_1_, request0_.addressLine2 as addressl6_1_, request0_.agency as agency7_1_, request0_.city as city8_1_, request0_.email as email9_1_, request0_.firstName as firstna10_1_, request0_.lastName as lastnam11_1_, request0_.phone as phone12_1_, request0_.relationship as relatio13_1_, request0_.state as state14_1_, request0_.zipcode as zipcode15_1_, request0_.submitted as submitt16_1_ from Request request0_ where request0_.firstName like ? order by request0_.submitted
рдЗрд╕рдиреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд SQL рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛:
2021-08-05 16:20:38,022 DEBUG [org.hib.SQL] (vert.x-eventloop-thread-19)
select
request0_.id as id1_1_,
request0_.caseId as caseid2_1_,
request0_.caseNumber as casenumb3_1_,
request0_.expires as expires4_1_,
request0_.addressLine1 as addressl5_1_,
request0_.addressLine2 as addressl6_1_,
request0_.agency as agency7_1_,
request0_.city as city8_1_,
request0_.email as email9_1_,
request0_.firstName as firstna10_1_,
request0_.lastName as lastnam11_1_,
request0_.phone as phone12_1_,
request0_.relationship as relatio13_1_,
request0_.state as state14_1_,
request0_.zipcode as zipcode15_1_,
request0_.submitted as submitt16_1_
from
Request request0_
where
request0_.firstName like <strong i="10">@P1</strong>
order by
request0_.submitted offset 0 rows fetch next ? rows only
рддреЛ ... рд╡рд╣реА рд╕рдорд╕реНрдпрд╛ рдЕрднреА рднреА рдореМрдЬреВрдж рд╣реИ рдХрд┐ рдЙрд╕рдиреЗ рдкреИрд░рд╛рдореАрдЯрд░ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдареАрдХ рд╕реЗ рдирд╣реАрдВ рдХрд┐рдпрд╛ (рдЕрдм fetch next ? rows only
), рд▓реЗрдХрд┐рди рдЗрд╕рдиреЗ рдЖрдкрдХреЗ рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдореЗрд▓ рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЗрдирд░реЗрдЯ рдХрд┐рдП рдЧрдП SQL рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛ред
рдЪреВрдВрдХрд┐ рдХреНрд╡рд╛рд░реНрдХрд╕ рдореЗрдВ рдЕрднреА рддрдХ рд╣рд╛рдЗрдмрд░рдиреЗрдЯ-рд░рд┐рдПрдХреНрдЯрд┐рд╡-рдХреЛрд░ 1.0.0.CR9 рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдкреЛрдо рдореЗрдВ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рд╣рд╛рдЗрдмрд░рдиреЗрдЯ-рдХреЛрд░ 5.5.5.Finalред рдХреНрдпрд╛ рдореБрдЭреЗ рдирд┐рд░реНрднрд░рддрд╛ рдпрд╛рдж рдЖ рд░рд╣реА рд╣реИ?
рдореИрдВрдиреЗ рджреЗрдЦрд╛ рдХрд┐ рдЬрд╣рд╛рдВ рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рдХреНрд╡реЗрд░реА Panache io.quarkus.hibernate.reactive.panache.common.runtime.CommonPanache QueryImpl:L254 рдореЗрдВ рдмрдирд╛рдИ рдЧрдИ рд╣реИ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ setFirstResult
рдФрд░ setMaxResults
рдХреНрд╡реЗрд░реА рдкрд░ред рдореИрдВрдиреЗ рдбреАрдмрдЧрд░ рдореЗрдВ рдХреНрд╡реЗрд░реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рджреЗрдЦрд╛ рдФрд░ рдЙрд╕ createQuery
рдкрджреНрдзрддрд┐ рдХреЗ рдЕрдВрдд рдореЗрдВ, рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд ReactiveQueryImpl рдореЗрдВ queryOptions рд╣реИрдВ рдЬрд┐рдирдореЗрдВ firstRow=0 рдФрд░ maxRows=25 рд╣реИрдВред
рдорджрдж рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХрд░реЗрдВ! (рд╕рдордЭреЗрдВ рдХрд┐ рдореИрдВ рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ)
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдПрдХ рдмрдЧ рдорд┐рд▓рд╛, рд╕рдВрднрд╡рддрдГ SQLServerParameters.processLimit() рдореЗрдВ
Panache firstRow=0 рдХреЗ рд╕рд╛рде рдПрдХ рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рдХреНрд╡реЗрд░реА рдмрдирд╛ рд░рд╣рд╛ рд╣реИред
рдЕрдВрджрд░ org.hibernate.reactive.loader.ReactiveLoader.executeReactiveQueryStatement
, SQLServer2012LimitHandler.getOffsetFetch()
рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
if ( !LimitHelper.hasFirstRow( selection ) ) {
return " offset 0 rows fetch next ? rows only";
}
return " offset ? rows fetch next ? rows only";
рдЗрд╕рд▓рд┐рдП, рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ SQL offset 0 rows fetch next ? rows only
рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИред рдХреЗ рдмрдЬрд╛рдп 0 рдиреЛрдЯ рдХрд░реЗрдВ?
SQLServerParameters.processLimit()
:
if (isProcessingNotRequired(sql)) {
return sql;
}
// Replace 'offset ? fetch next ? rows only' with the <strong i="17">@P</strong> style parameters for Sql Server
int index = hasOffset ? parameterArray.length - 1 : parameterArray.length;
int pos = sql.indexOf( " offset ?" );
if ( pos > -1 ) {
String sqlProcessed = sql.substring( 0, pos ) + " offset @P" + index++ + " rows";
if ( sql.indexOf( " fetch next ?" ) > -1 ) {
sqlProcessed += " fetch next @P" + index + " rows only ";
}
return sqlProcessed;
}
return sql;
sql.indexOf( " offset ?")
рд╕рдорд╕реНрдпрд╛ рд╣реИ: рдХреНрдпреЛрдВрдХрд┐ LimitHandler рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдСрдлрд╕реЗрдЯ рдХреЛ 0 рдкрд░ рд╣рд╛рд░реНрдб-рдХреЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╕рдмрд╕реНрдЯреНрд░рд┐рдВрдЧ offset ?
рдирд╣реАрдВ рдорд┐рд▓рд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдХрд┐рд╕реА рдФрд░ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рдиреЗрд╕реНрдЯреЗрдб рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореИрдЪ рдХреА рддрд▓рд╛рд╢ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП fetch next ?
рдХреЗ рд▓рд┐рдП рдореИрдЪ рдХреЗ рд▓реЗ рдЬрд╛рдпрд╛ рдЬрд╛ рдмрд╛рд╣рд░ offset
?
@ рднрд╛рд░рд╡рд░реНрдб рдпрджрд┐ рдЖрдк рдПрдХ рдЯреЗрд╕реНрдЯ рдХреЗрд╕ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдХреЗрд╡рд▓ рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рд░рд┐рдПрдХреНрдЯрд┐рд╡ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдХреА рдмрд╣реБрдд рд╕рд░рд╛рд╣рдирд╛ рдХреА рдЬрд╛рдПрдЧреА
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЙрд╕ рдкрд░ рднреА рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВрдЧреЗ рдЬреЛ рдкреИрдирд╛рдЪреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рднрдВрдбрд╛рд░ рдЙрд╕ рддрд░рд╣ рдХреЗ рдореБрджреНрджреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рдЬрдЧрд╣ рдирд╣реАрдВ рд╣реИ
рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рд╣рдо рдПрдХ рдРрд╕реЗ рдкрд░реАрдХреНрд╖рдг рдХреЛ рдпрд╛рдж рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рдХреЗрд╡рд▓ рдЕрдзрд┐рдХрддрдо рдкрд░рд┐рдгрд╛рдо рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рди рдХрд┐ рдкрд╣рд▓рд╛ рдкрд░рд┐рдгрд╛рдоред
рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдмреБрдирд┐рдпрд╛рджреА рд╣реИ: https://github.com/hibernate/hibernate-reactive/blob/ccaa6061fc7e649ee0e1e09b5adda230d39dfe4f/hibernate-reactive-core/src/test/java/org/hibernate/reactive/HQLQueryParameterNamedLimitTest.java#L54
@gavinking рдФрд░ @DavidD - рдзрдиреНрдпрд╡рд╛рджред рдпрд╣ рдПрдХ рдФрд░ рдкрд░реАрдХреНрд╖рдг рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ, рдПрдХ рдЬреЛ _both_ setFirstResult(0)
рдФрд░ setMaxResults(n)
(n рдХреЛрдИ рднреА рдорд╛рди> 0) рдХрд░реЗрдЧрд╛, рдЬреЛ рддреНрд░реБрдЯрд┐ рдореИрдВ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ рдЙрд╕реЗ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░реЗрдЧрд╛ред
SQLServer2012LimitHandler.getOffsetFetch()
firstResult==0 ("рдСрдлрд╝рд╕реЗрдЯ 0 рдкрдВрдХреНрддрд┐рдпреЛрдВ...") рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрд▓рдЧ SQL рдмрдирд╛рддрд╛ рд╣реИ рдЬрдм firstResult >0 ("рдСрдлрд╝рд╕реЗрдЯ? рдкрдВрдХреНрддрд┐рдпрд╛рдБ") рдХреА рддреБрд▓рдирд╛ рдореЗрдВ;
рдпрджрд┐ рдпрд╣ рдЕрднреА рднреА рд╕рд╣рд╛рдпрдХ рд╣реЛрдЧрд╛, рддреЛ рдХреБрдЫ рджрд┐рдиреЛрдВ рдореЗрдВ рдореИрдВ рдХреБрдЫ рд╕рдордп рдмрд┐рддрд╛ рд╕рдХрддрд╛ рд╣реВрдВ рдпрд╛ рддреЛ рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЫреЛрдЯрд╛ рдПрдЪрдЖрд░-рдХреЗрд╡рд▓ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛ рд╕рдХрддрд╛ рд╣реВрдВ, рдпрд╛ рдПрдХ рдкрд░реАрдХреНрд╖рдг рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП HQLQueryParameterNamedLimitTest рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рд╣реИред
рдЖрд╣, рдЖрдк рд╕рд╣реА рдХрд╣ рд░рд╣реЗ рд╣реИрдВ, рдпрд╣ рдкрд░реАрдХреНрд╖рдг рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рдПрдЧрд╛ HQLQueryParameterNamedLimitTest
:
<strong i="7">@Test</strong>
public void testFirstResultZeroAndMaxResults(TestContext context) {
test(
context,
openSession()
.thenCompose( s ->
s.createQuery( "from Flour order by id" )
.setFirstResult( 0 )
.setMaxResults( 10 )
.getResultList()
.thenAccept( result -> {
context.assertEquals( 3, result.size() );
} )
)
);
}
рдореЗрдВ рджреЗрдЦ рд▓реВрдВрдЧрд╛
@DavidD _in рдЕрддрд┐рд░рд┐рдХреНрдд_ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП, рдХреНрдпрд╛ рдореИрдВ рдЗрд╕ рддрд░рд╣ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдкрд░реАрдХреНрд╖рдг рдХрд╛ рд╕реБрдЭрд╛рд╡ рднреА рджреЗ рд╕рдХрддрд╛ рд╣реВрдВ:
<strong i="7">@Test</strong>
public void testFirstResultZeroAndMaxResultsWithoutOrderBy(TestContext context) {
test(
context,
openSession()
.thenCompose( s ->
s.createQuery( "from Flour" )
.setFirstResult( 0 )
.setMaxResults( 10 )
.getResultList()
.thenAccept( result -> {
context.assertEquals( 3, result.size() );
} )
)
);
}
рдЕрдВрддрд░ "рдЖрджреЗрд╢ рджреНрд╡рд╛рд░рд╛" рдХреЛ рд╣рдЯрд╛рдиреЗ рдореЗрдВ рд╣реИред рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ SQLServer2005LimitHandler рдХреНрд╡реЗрд░реА рдХреЛ select top(?) ...
рд░реВрдк рдореЗрдВ рд▓рд┐рдЦрддрд╛ рд╣реИ рдЬрдм рднреА рдХреНрд╡реЗрд░реА рдореЗрдВ "рдСрд░реНрдбрд░ рдмрд╛рдп" рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЬрдм рдпрд╣ рдХрд░рддрд╛ рд╣реИ рддреЛ рдпрд╣ offset ? fetch next ?
рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ 2 рдЯреЗрд╕реНрдЯ рдХреЗрд╕ рдХреА рдЬрд░реВрд░рдд рд╣реИред
рдмрд╣реБрдд рд╕рд░рд╛рд╣рдирд╛ рдХреА!!