2011-08-09 11 views
3

私のアプリでJPA 2.0を実装する際に問題が発生しています。私はCriteriaクエリを使用しており、EntityManagerからセッションを取得する必要があります。私は以下の方法でそれを行います(thisによる) セッションses = entityManager.unwrap(Session.class);EntityManager.unwrap()throw java.lang.AbstractMethodError

の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

Hibernate 3.4.xはJPA-2に準拠していません。 JPA 2 was first supported in Hibernate Entitymanager 3.5.0

エラーが発生した場合は、アクセスしているインターフェイスメソッドの実装方法がClassLoaderに見つからないことを意味します.JAAでunwrapが追加されているため、基本実装がJPA- 2.

+1

解決済み! hibernate.orgから最新のhibernate jarをダウンロードしました。また、同じパッケージ名を持ち、ビルドパス順でhibernate-jpa-2.0 jarの前にあったクラスパスにejb3-persistence.jarがありました。そのjarはJPA 2.0仕様を実装していませんでした。 –

+0

@arielあなたはおそらく[私の答えを受け入れる]必要があります(http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work) –

0

私はOpenEJB(4.6.0)の最新バージョンでは、Hibernate(3.3.0)の古いバージョンを使用しています。私の解決策は次のとおりです。

EntityManagerImpl entityManager = (EntityManagerImpl)em.getDelegate(); 
Session session = entityManager.getSession(); 
関連する問題