Escribí un método EJB sin estado que permite obtener una entidad en modo "solo lectura".Separar una entidad de un contexto de persistencia JPA (JPA 2.0/Hibernate/EJB 3/J2EE 6)
La forma de hacerlo es obtener la entidad con EntityManager y luego separarla (utilizando el JPA 2.0 EntityManager).
Mi código es el siguiente:
@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;
}
}
Conseguir la entidad trabaja muy bien, pero la llamada al método detach
devuelve el siguiente error:
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)
no puedo conseguir más información y no entiendo cuál es el problema ...
¿Alguien podría ayudar?
¡Gracias! Acabo de actualizar mis JAR de Hibernate a 3.5.0 CR2 y funciona muy bien. – Julien
¿La operación de separación es recursiva (es decir, en cascada)? –
@Guido - sí, si tiene cascadeType = DETACH – Bozho