/ / Отстраняване на обект от контекста на устойчивостта на JPA (JPA 2.0 / Hibernate / EJB 3 / J2EE 6) - хибернация, jpa, ejb-3.0

Отделяне на субект от контекста на ППС (JPA 2.0 / Hibernate / EJB 3 / J2EE 6) - хибернация, jpa, ejb-3.0

Написах безпристрастен 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)

Не мога да получа повече информация и не разбирам какъв е проблемът ...

Може ли някой да помогне?

Отговори:

7 за отговор № 1

Предполагам, че използвате JPA 2.0 с неправилна версия на Hibernate, която не изпълнява спецификацията JPA 2.0. EntityManagerImpl няма необходимия метод.

Предлагам модернизиране на хибернация до 3.5, което е изпълнение на JPA 2.0.


1 за отговор № 2

Можете да откачите всички обекти с ясни, но отделянето само на едно цяло не е в JPA 2.0. http://java.sun.com/javaee/5/docs/api/javax/persistence/EntityManager.html

Вероятно сте имали хибернация в пътя на изграждане и друга реализация на сървъра на приложения (EclipseLink? Или старата версия на хибернация) ...

Най- entityManager.detach(...) е в хибернация, но не и в JPA, така че имате нужда от хибернация impl на вашия сървър на приложения, за да използвате тази функция ...