Я использую управляемый контейнером 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)
Почему вы не используете транзакцию, предоставленную весной. –
"@VibhaySachan Мы не используем весну на нашем рабочем месте. Hibernate with wildfly 10. – Ratha
, то вы можете использовать javax.transaction.Transactional –