2017-02-03 1 views
0

Я хочу запустить аналогичный запрос, используя спящий режим. Меня беспокоит, что если я установил @runtot as 0, другой запрос, запущенный одновременно, может привести к неправильному результату.Запрос с использованием общего числа в спящем режиме

SET @runtot:=0; select name, quantity, (@runtot := @runtot + quantity) as runtotal from item where @runtot+quantity <= 20;

ответ

1

Под ожидаемого использования, что не будет проблемой.

Ваша переменная @runtot связана с конкретной сессией базы данных, которая имеет отношение 1 к 1 к определенному JDBC Connection с вашей базой данных. Объекты Hibernate Session и EntityManager также связаны с конкретным JDBC Connection в любой момент времени.

Учитывая, что ни Session или EntityManager потокобезопасны, это подразумевает, что вы никогда не должны быть в ситуации, когда же Connection является исполняющим ваш пример кода больше, чем когда-то вызывает состояние этой переменной будет испорчена.

До тех пор, пока вы никогда не делитесь Session и EntityManager между потоками исполнения, ваш код будет работать нормально, не опасаясь другого выполнения, создающего проблемы.