我编写了一种无状态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)

我无法获得更多信息,也无法理解问题所在……

有人可以帮忙吗?

最佳答案

我假设您使用的JPA 2.0的Hibernate版本不正确,而Hibernate并未实现JPA 2.0规范。该异常表明EntityManagerImpl没有所需的方法。

我建议将 hibernate 模式升级到3.5,这是JPA 2.0的实现。

关于hibernate - 从JPA持久性上下文(JPA 2.0/Hibernate/EJB 3/J2EE 6)分离实体,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2538829/

10-13 09:09