Tôi đã viết phương thức EJB không trạng thái cho phép nhận thực thể ở chế độ "chỉ đọc".Tách một thực thể khỏi ngữ cảnh kiên trì JPA (JPA 2.0/Hibernate/EJB 3/J2EE 6)
Cách để thực hiện việc này là để có được thực thể với EntityManager sau đó tách nó ra (bằng cách sử dụng JPA 2.0 EntityManager).
Mã của tôi là như sau:
@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;
}
}
Lấy thực thể hoạt động tốt, nhưng cuộc gọi đến phương pháp detach
trả về lỗi sau:
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)
tôi không thể nhận thêm thông tin và không hiểu vấn đề là gì ...
Ai đó có thể trợ giúp?
Cảm ơn! Chỉ cần cập nhật JAR Hibernate của tôi lên 3.5.0 CR2 và nó hoạt động rất tốt. – Julien
Thao tác tách có đệ quy (tức là trong tầng)? –
@Guido - vâng, nếu bạn có cascadeType = DETACH – Bozho