MSSQL-сервер с Hibernate выполняет другой запрос, чем из консоли SQL - PullRequest
0 голосов
/ 22 июня 2019

Если есть запрос, который выбирает первые 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 источника данных, но безрезультатно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...