2014-12-08 4 views
1

Когда я пытаюсь вызвать session.createSQLQuery() внутри myExecutor.execute(new Runnable() ...), я получаю исключение:Сессия закрыта, когда внутри ExecutorService

SessionException: Session is closed! 

Почему Сессия закрыта во время ExecutorService.execute?

Должен ли я создать новый entityManager внутри execute?

ExecutorService executor = newSingleThreadExecutor(); 
executor.execute(new Runnable() 
    { 
     @Override 
     public void run() 
     { 
      Session session = (Session) entityManager.getDelegate(); 
      SQLQuery query = session.createSQLQuery("SELECT * FROM function()"); 
     } 
    } 

ответ

2

Как правило, каждый поток имеет свой сеанс. ExecutorService имеет свои собственные потоки, и поэтому вам нужно будет управлять менеджером сущностей, сеансом и транзакцией в потоке исполнителя в вашем методе run().

Смежные вопросы