2009-11-30 73 views
2

我的應用程序試圖使用Hibernate註釋。我已經得到安裝了3.5.0版本的Hibernate的,但是當我嘗試加載我的應用程序,我得到以下異常:另一個休眠問題

junit.framework.AssertionFailedError: Exception in constructor: testSubscriber (java.lang.NoClassDefFoundError: javax/persistence/spi/ProviderUtil 
    at java.lang.Class.getDeclaredConstructors0(Native Method) 
    at java.lang.Class.privateGetDeclaredConstructors(Class.java:2389) 
    at java.lang.Class.getConstructor0(Class.java:2699) 
    at java.lang.Class.newInstance0(Class.java:326) 
    at java.lang.Class.newInstance(Class.java:308) 
    at javax.persistence.Persistence.findAllProviders(Persistence.java:79) 
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:48) 
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:33) 
    at com.upod.dao.SubscriberDAOTest.<init>(SubscriberDAOTest.java:32) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513) 
    at junit.framework.TestSuite.createTest(TestSuite.java:58) 
    at junit.framework.TestSuite.addTestMethod(TestSuite.java:280) 
    at junit.framework.TestSuite.<init>(TestSuite.java:140) 
    at org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestLoader.getTest(JUnit3TestLoader.java:102) 
    at org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestLoader.loadTests(JUnit3TestLoader.java:59) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:445) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196) 
Caused by: java.lang.ClassNotFoundException: javax.persistence.spi.ProviderUtil 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:200) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:188) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:319) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:330) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:254) 
    at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:399) 
    ... 22 more 
) 
    at junit.framework.Assert.fail(Assert.java:47) 
    at junit.framework.TestSuite$1.runTest(TestSuite.java:90) 
    at junit.framework.TestCase.runBare(TestCase.java:130) 
    at junit.framework.TestResult$1.protect(TestResult.java:106) 
    at junit.framework.TestResult.runProtected(TestResult.java:124) 
    at junit.framework.TestResult.run(TestResult.java:109) 
    at junit.framework.TestCase.run(TestCase.java:120) 
    at junit.framework.TestSuite.runTest(TestSuite.java:230) 
    at junit.framework.TestSuite.run(TestSuite.java:225) 
    at org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:130) 
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196) 

Apprently,我失去了一些東西,或者我再有不兼容的罐子 ,但對於我的生活,我無法弄清楚問題出在哪裏。我已經獲得了hibernate3.jar,ejb3-persistence.jar以及Hibernate文檔中指定的所有依賴關係,但我仍然可以獲得這一點。

任何人之前看過這個或有一個想法我做錯了什麼?

感謝

--Steve

回答

1

你在你的類路徑正確的JPA罐子?因爲您選擇的錯誤是:java.lang.NoClassDefFoundError: javax/persistence/spi/ProviderUtil

編輯

你知道嗎,在我們走得更遠試圖弄清楚這一點,我們應該問,如果真的有必要使用3.5.0(因爲在時間要這是寫作,它是3.5.0- Beta -2)。如果你正在尋找的是Annotations,使用Hibernate Core 3.3.2就足以讓你使用Hibernate Annotations 3.4.0。

恕我直言,你可能希望只備份版本的東西「安全」

+0

我知道的唯一JPA jar是ejb3-persistence.jar,我確實在我的類路徑中有它。未找到的類未在該jar中定義。 – Steve 2009-11-30 18:40:15

+0

嗯,那個'ejb3-persistence.jar'從哪裏來的?是JPA 2.0嗎? – dustmachine 2009-11-30 18:58:48

+0

附近,我可以告訴,該jar是必要的定義JPA應用程序的註釋。如果我刪除它,我得到@Entity的編譯錯誤等...... – Steve 2009-11-30 19:10:00

2

我不知道是什麼文件,你指的是,你沒有張貼任何聯繫,所以我沒有檢查什麼這是說,但我認爲你你缺少的jpa-api依賴,我可以在hibernate-parent-3.5.0-Beta-2pom.xml看到(它提供javax.persistence.spi.ProviderUtil):

<dependency> 
    <groupId>org.hibernate.java-persistence</groupId> 
    <artifactId>jpa-api</artifactId> 
    <version>2.0-cr-1</version> 
</dependency> 

可以從JBoss Maven庫得到它(它似乎並不將被包含在上發佈的捆綁包中)。開始使用maven的時候:)

6

如果你使用的是Hibernate 3.5.x,你還需要下面的jar文件。

hibernate-jpa-2.0-api-1.0.0-CR-1.jar

我有同樣的問題,增加這個固定的問題。

+0

它也解決了我的問題!感謝Srini! – Bhushan 2011-06-09 13:51:50