我想使用休眠模式运行类似的查询。我担心,因为如果设置@runtot as 0
,则同时运行另一个查询可能会得到错误的结果。SET @runtot:=0;select name, quantity, (@runtot := @runtot + quantity) as runtotal from item where @runtot+quantity <= 20;
最佳答案
在预期的使用率下,这将不是问题。
您的变量@runtot
与特定的数据库会话相关联,该会话与数据库中的特定JDBC Connection
具有一对一关系。 Hibernate Session
和EntityManager
对象也在任何给定时刻也与特定的JDBC Connection
关联。
鉴于Session
或EntityManager
都不是线程安全的,这意味着您永远都不应处于同一Connection
多次执行示例代码而导致变量状态被污染的情况。
因此,只要您从未在执行线程之间共享Session
和EntityManager
,您的代码就可以正常工作,而不必担心其他执行会引起问题。