2009-11-30 74 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