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