Hibernate AssertionFailure在不同的线程中

bla*_*pit 4 java multithreading hibernate assertions

我用一个会话连接到我的数据库.我在整个计划中总是使用相同的会话.我的线程"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
Run Code Online (Sandbox Code Playgroud)

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

我在两个线程中使用相同会话的失败是什么?

解决这个问题的正确方法是什么?

小智 5

每个线程都应该从Hibernate会话工厂获得自己的会话.

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

请参见:Hibernate Session JavaDoc

当你"取消"一个线程时 - 它应该像事务回滚,会话关闭等那样进行自己的清理.