2017-02-03 3 views
0

hibernateを使用して同様のクエリを実行します。 @runtot as 0と設定すると、同時に実行されている別のクエリが間違った結果になる可能性があるため、私は懸念しています。予想される使用の下で休止状態での実行中の合計を使用したクエリ

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

答えて

1

、それが問題になることはありません。

変数@runtotは、データベースとの特定のJDBC Connectionと1対1の関係にある特定のデータベースセッションに関連付けられています。 Hibernate SessionEntityManagerオブジェクトは、特定の時点で特定のJDBC Connectionにも関連付けられています。

は、あなたが同じ Connectionはかつて、変数の状態が汚染させるよりも、より多くのあなたの例のコードを実行している状況であってはならないことを暗示しています、 Sessionまたは EntityManagerどちらがスレッドセーフであることを考えます。

実行スレッド間でSessionEntityManagerを共有しない限り、問題を発生させる別の実行を心配することなく、コードはうまく動作します。