3

我在我的应用程序中实现 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

对此有任何想法吗?

4

2 回答 2

4

Hibernate 3.4.x 不符合 JPA-2。JPA 2首先在 Hibernate Entitymanager 3.5.0 中得到支持

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

于 2011-08-09T15:03:16.760 回答
0

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

EntityManagerImpl entityManager = (EntityManagerImpl)em.getDelegate();
Session session = entityManager.getSession();
于 2017-08-02T18:24:34.073 回答