2016-10-27 10 views
0

Я использую управляемый контейнером JPA, где вводится экземпляр EntityManager. С инъецированным экземпляром entitymanager, когда я использую метод find(), он говорит, что диспетчер объектов закрыт. Я использую wildfly 10.Hibernate EntityManager закрывается, в wildfly 10

Как я могу преодолеть эту проблему? Что я здесь делаю неправильно?

Я создаю сущность-менеджер следующим образом;

 @PersistenceContext 
     protected EntityManager em; 


    @Stateless 
    public class CustomerService CrudService<Customer> { 


    @TransactionAttribute(TransactionAttributeType.REQUIRED) 
    public void update(Customer entity) { 

    Customer item = em.find(Customer.class,entity.getId()); //ISSUE 
    if (entity.getParentId()!=null) { 
     item.setParent(em.find(CRMEntity.class , entity.getParentId())); 
    item.setParentId(entity.getParentId()); 
    } 
.... 

super.update(item); 
} 

public abstract class CrudService<T extends BaseEntity> { 
public void update(T entity) { 
     Session session = null; 

     try { 
      session = getSession(); 
      session.update(entity); 
      session.flush(); 

     } catch (HibernateException ex) { 
      log.error("Error when update." + entity.getCode(), ex); 
      if (session != null) { 
       session.cancelQuery(); 
      } 
     } finally { 
      if (session != null && session.isOpen()) { 
       session.clear(); 
       session.close(); 
      } 
     } 
    } 
public Session getSession() { 
     if (session == null || !session.isOpen()) { 
      session = getEntityManager().unwrap(Session.class); 
     } 
     return session; 
    } 

} 

Я получаю вопрос на этой линии;

Customer item = em.find(Customer.class,entity.getId()); 

Ошибка

Caused by: java.lang.IllegalStateException: Session/EntityManager is closed 
    at org.hibernate.internal.AbstractSharedSessionContract.checkOpen(AbstractSharedSessionContract.java:326) 
    at org.hibernate.engine.spi.SharedSessionContractImplementor.checkOpen(SharedSessionContractImplementor.java:126) 
    at org.hibernate.internal.SessionImpl.find(SessionImpl.java:3312) 
    at org.hibernate.internal.SessionImpl.find(SessionImpl.java:3297) 
    at org.jboss.as.jpa.container.AbstractEntityManager.find(AbstractEntityManager.java:213) 
    at com.leightonobrien.lob2.service.autogen.CustomerService.update(CustomerService.java:412) 
    at sun.reflect.GeneratedMethodAccessor249.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:497) 
    at org.jboss.as.ee.component.ManagedReferenceMethodInterceptor.processInvocation(ManagedReferenceMethodInterceptor.java:52) 
    at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340) 
    at org.jboss.invocation.InterceptorContext$Invocation.proceed(InterceptorContext.java:437) 
+0

Почему вы не используете транзакцию, предоставленную весной. –

+0

"@VibhaySachan Мы не используем весну на нашем рабочем месте. Hibernate with wildfly 10. – Ratha

+0

, то вы можете использовать javax.transaction.Transactional –

ответ

1

Проблема здесь я закрыл сессию. После его удаления все работает нормально

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

  • Нет связанных вопросов^_^