2009-11-30 2 views
2

Мое приложение пытается использовать аннотации Hibernate. Я получил версию 3.5.0 из спящего режима установлен, но когда я пытаюсь загрузить мое приложение, я получаю следующее исключение:Еще один вопрос о гибернате

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 в вашем пути к классам? так как Youre ошибка: java.lang.NoClassDefFoundError: javax/persistence/spi/ProviderUtil

EDIT

Y'know, прежде чем мы пойдем дальше, пытаясь понять это, мы должны спросить, если это действительно необходимо использовать 3.5.0 (так как во время это письмо, это 3.5.0- Beta -2). Если все, что вы ищете, это аннотации, использование Hibernate Core 3.3.2 достаточно, чтобы вы могли использовать Hibernate Annotations 3.4.0.

ИМХО, вы можете просто создать резервную копию версии к чему-то «безопасное»

+0

Единственный банку JPA, о котором я знаю, является ejb3-persistence.jar, и у меня есть это на моем пути к классам. Класс, который не найден, не определен в этой банке. – Steve

+0

Хммм, откуда взялся этот 'ejb3-persistence.jar'? это JPA 2.0? – dustmachine

+0

Рядом, как я могу судить, эта банка необходима для определения аннотаций для приложения JPA. Если я удалю его, я получаю ошибки компиляции для @Entity и т. Д. – Steve

2

Я не знаю, какие документы вы имеете в виду, как вы не размещать ссылку, чтобы я не проверял, что он говорит, но я думаю, что вы, вам не хватает jpa-api зависимости, что я могу видеть в pom.xml из hibernate-parent-3.5.0-Beta-2 (она обеспечивает javax.persistence.spi.ProviderUtil):

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

вы можете получить его из JBoss Maven хранилища (это не кажется для включения в комплект, выпущенный на SourceForge). Время для начала использования maven :)

6

Если вы используете Hibernate 3.5.x, вам также нужен следующий файл jar.

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

У меня была такая же проблема, и добавив это исправили проблему.

+0

он тоже решил мою проблему! Спасибо Шрини! – Bhushan

Смежные вопросы