EntityManager.unwrap() 抛出 java.lang.AbstractMethodError
我在应用程序中实现 JPA 2.0 时遇到一些问题。我正在使用 Criteria 查询,并且需要从 EntityManager 获取会话。我按照以下方式执行此操作(根据 这个) 会话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
对此有什么想法吗?
I'm having some issues implementing JPA 2.0 in my app. I'm using Criteria queries and I need to grab the session from the EntityManager. I do it in the following way (according to this)
Session ses = entityManager.unwrap(Session.class);
After running on top of Tomcat 7.0.8 I get the following:
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)
Also I'm referencing the following Hibernate-related dependencies (where I suspect the problem is):
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
Any idea about this?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
Hibernate 3.4.x 不兼容 JPA-2。 JPA 2 首先在 Hibernate Entitymanager 3.5.0 中得到支持。
您收到的错误意味着 ClassLoader 无法找到您正在访问的接口方法的实现方法,如果底层实现仅符合 JPA-1,那么这是完全有意义的,因为 unwrap 已在 JPA 2 中添加。
Hibernate 3.4.x is not JPA-2 compliant. JPA 2 was first supported in Hibernate Entitymanager 3.5.0.
The error you are getting means that the ClassLoader can't find the implementation method for the interface method you are accessing, which makes perfect sense if the underlying implementation is only JPA-1 conform, since unwrap has been added in JPA 2.
我正在使用旧版本的 Hibernate (3.3.0) 和最新版本的 OpenEJB (4.6.0)。我的解决方案是:
I'm using an old version of Hibernate (3.3.0) with a newest version of OpenEJB (4.6.0). My solution was: