我想使用休眠模式运行类似的查询。我担心,因为如果设置@runtot as 0,则同时运行另一个查询可能会得到错误的结果。

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

最佳答案

在预期的使用率下,这将不是问题。

您的变量@runtot与特定的数据库会话相关联,该会话与数据库中的特定JDBC Connection具有一对一关系。 Hibernate SessionEntityManager对象也在任何给定时刻也与特定的JDBC Connection关联。

鉴于SessionEntityManager都不是线程安全的,这意味着您永远都不应处于同一Connection多次执行示例代码而导致变量状态被污染的情况。

因此,只要您从未在执行线程之间共享SessionEntityManager,您的代码就可以正常工作,而不必担心其他执行会引起问题。

09-19 20:48