一尘不染

不同线程中的Hibernate AssertionFailure

hibernate

我通过一个会话连接到数据库。在整个程序中,我总是有相同的会话。我的线程“
1”从数据库中捕获主要数据。必须允许用户取消该线程。因此,如果用户频繁或快速按下“取消”按钮(这是我的解释),则会发生以下错误:

ERROR org.hibernate.AssertionFailure - HHH000099: an assertion failure occured (this may indicate a bug in Hibernate, but is more likely due to unsafe use of the session) 
org.hibernate.AssertionFailure: possible non-threadsafe access to the session

如果我取消线程“ 1”完成并尝试从数据库加载另一个主数据集后在后台运行的线程“ 2”,则会发生相同的错误。

我在两个线程中使用同一会话的失败是吗?

解决此类问题的正确方法是什么?


阅读 363

收藏
2020-06-20

共1个答案

一尘不染

每个线程都应从Hibernate会话工厂获取自己的会话。

并不意味着实现者是线程安全的。相反,每个线程/事务都应从SessionFactory获取其自己的实例。

参见此处:Hibernate Session
JavaDoc

当您“取消”线程时-它应该自己进行清理,例如事务回滚,会话关闭等。

2020-06-20