我在我的应用中遇到了一些实施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
对此有何想法?
答案 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();