EntityManager.unwrap()抛出java.lang.AbstractMethodError

时间:2011-08-09 09:29:26

标签: java hibernate jpa jpa-2.0 hibernate-entitymanager

我在我的应用中遇到了一些实施JPA 2.0的问题。我正在使用Criteria查询,我需要从EntityManager中获取会话。我是按照以下方式进行的(根据this)     Session ses = entityManager.unwrap(Session.class);

在Tomcat 7.0.8上运行后,我得到以下内容:

Struts has detected an unhandled exception:
# Messages:     org.hibernate.ejb.EntityManagerImpl.unwrap(Ljava/lang/Class;)Ljava/lang/Object;

Stacktraces 
java.lang.reflect.InvocationTargetException
java.lang.AbstractMethodError: org.hibernate.ejb.EntityManagerImpl.unwrap(Ljava/lang/Class;)Ljava/lang/Object; sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

此外,我正在引用以下与Hibernate相关的依赖项(我怀疑问题出在哪里):

hibernate-3.2.5.ga.jar
hibernate-annotations-3.4.0.GA.jar
hibernate-commons-annotations-3.1.0.GA.jar
hibernate-core-3.3.0.GA.jar
hibernate-entitymanager-3.4.0.GA.jar
hibernate-jpa-2.0-api-1.0.0.Final.jar

对此有何想法?

2 个答案:

答案 0 :(得分:4)

Hibernate 3.4.x不符合JPA-2标准。 JPA 2 was first supported in Hibernate Entitymanager 3.5.0

您获得的错误意味着ClassLoader无法找到您正在访问的接口方法的实现方法,如果底层实现仅符合JPA-1,则非常有意义,因为JPA 2中添加了unwrap

答案 1 :(得分:0)

我正在使用旧版本的Hibernate(3.3.0)和最新版本的OpenEJB(4.6.0)。我的解决方案是:

EntityManagerImpl entityManager = (EntityManagerImpl)em.getDelegate();
Session session = entityManager.getSession();