Napisałem bezstanową metodę EJB pozwalającą uzyskać encję w trybie "tylko do odczytu".Odłączanie encji od kontekstu utrwalania JPA (JPA 2.0/Hibernate/EJB 3/J2EE 6)
Sposób wykonania tej czynności polega na pobraniu encji za pomocą EntityManager, a następnie jej odłączeniu (przy użyciu menedżera JPA 2.0 EntityManager).
Mój kod jest następujący:
@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;
}
}
Pierwsze jednostka działa prawidłowo, ale wywołanie metody detach
zwraca następujący błąd:
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)
nie mogę uzyskać więcej informacji i nie rozumiem, na czym polega problem ...
Czy ktoś może pomóc?
Dzięki! Właśnie zaktualizowałem moje słoje Hibernate do 3.5.0 CR2 i to działa wspaniale. – Julien
Czy operacja odłączania jest rekursywna (to jest kaskadowo)? –
@Guido - tak, jeśli masz cascadeType = DETACH – Bozho