Если есть запрос, который выбирает первые 50 строк в представлении:
select * from device_overview order by device_id asc offset 0 rows fetch next 50 rows only
Если я посмотрю с sql profiler, я вижу, что это переведено на
declare @p1 int
set @p1=180150031
declare @p2 int
set @p2=50
exec sp_cursoropen @p1 output,N'select * from device_overview
order by device_id asc offset 0 rows fetch next 50 rows only',8,8193,@p2 output
select @p1, @p2
когда я запускаю тот же самый запрос из моего весеннего загрузочного приложения, которое имеет спящий режим как ORM, запрос переводится как
exec sp_executesql N'select deviceover0_.id as id1_8_,
/*...all other fields ommitted..*/
from dbo.device_overview deviceover0_
order by deviceover0_.device_id asc offset 0 rows fetch next @P1 rows only ,@P1 int,50
последний потребляет значительно больше энергии процессора, и при работе на Azure SQL достигает предела DTU нашего плана.
Есть ли способ сообщить hibernate о генерации запроса таким же образом, как описано выше, с использованием курсора вместо простого выполнения оператора? Я пытался с; selectMethod = курсор на URL источника данных, но безрезультатно.