当我尝试在 myExecutor.execute(new Runnable() ...)
中调用 session.createSQLQuery()
时,出现异常:
SessionException: Session is closed!
为什么 session 在ExecutorService.execute
期间关闭?
我必须在execute
中创建一个新的entityManager
吗?
ExecutorService executor = newSingleThreadExecutor();
executor.execute(new Runnable()
{
@Override
public void run()
{
Session session = (Session) entityManager.getDelegate();
SQLQuery query = session.createSQLQuery("SELECT * FROM function()");
}
}
最佳答案
通常,每个线程都有自己的 session 。 ExecutorService 有自己的线程,因此您需要在 run()
方法中管理执行程序线程内的实体管理器、 session 和事务。
关于java - session 在 ExecutorService 内部时关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27365403/