Отсоедините объект от контекста персистентности JPA (JPA 2.0 / В спящем режиме / EJB 3 / J2EE 6),

Я записал метод EJB не сохраняющий состояние, позволяющий получить объект в режиме "только для чтения".

Способ сделать это должно добраться, объект с EntityManager затем отсоединяют его (использование JPA 2.0 EntityManager).

Мой код следующий:

@PersistenceContext
private EntityManager entityManager;

public T getEntity(int entityId, Class<T> specificClass, boolean readOnly) throws Exception{
  try{
    T entity = (T)entityManager.find(specificClass, entityId);
    if (readOnly){
      entityManager.detach(entity);
    }
    return entity;
  }catch (Exception e){
    logger.error("", e);
    throw e; 
  }
}  

Получение объекта хорошо работает, но вызов к detach метод возвращает следующую ошибку:

GRAVE: javax.ejb.EJBException
    at ...
Caused by: java.lang.AbstractMethodError: org.hibernate.ejb.EntityManagerImpl.detach(Ljava/lang/Object;)V
    at com.sun.enterprise.container.common.impl.EntityManagerWrapper.detach(EntityManagerWrapper.java:973)
    at com.mycomp.dal.MyEJB.getEntity(MyEJB.java:37)

Я не могу получить больше информации и не понимаю, какова проблема...

Кто-то мог помочь?

8
задан Bozho 29 March 2010 в 16:47
поделиться

2 ответа

Я предполагаю, что вы используете JPA 2.0 с неправильной версией Hibernate, которая не реализует спецификацию JPA 2.0. Исключение сообщает, что EntityManagerImpl не имеет необходимого метода.

Я предлагаю обновить спящий режим до версии 3.5, которая является реализацией JPA 2.0.

7
ответ дан 5 December 2019 в 20:15
поделиться

Вы можете отсоединить все объекты с помощью очистки, но отсоединение только одного объекта отсутствует в JPA 2.0. http: // java .sun.com / javaee / 5 / docs / api / javax / persistence / EntityManager.html

Вероятно, в вашем пути сборки был имплантированный спящий режим и другая реализация на вашем сервере приложений (EclipseLink? или старая версия спящего режима). .

entityManager.detach (...) находится в спящем режиме, но не в JPA, поэтому для использования этой функции вам понадобится имплантация спящего режима на сервере приложений ...

{{1} }
1
ответ дан 5 December 2019 в 20:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: