2012-02-03 17 views
30

Recientemente he actualizado a Hibernate 4.0.1.Final y estoy recibiendo el siguiente error en el contexto de inicio:¿Cómo puedo resolver java.lang.ClassNotFoundException: org.hibernate.util.DTDEntityResolver al usar Spring 3.1 con Hibernate 4.0.1?

Caused by: java.lang.NoClassDefFoundError: org/hibernate/util/DTDEntityResolver 
    at java.lang.ClassLoader.defineClass1(Native Method) 
    at java.lang.ClassLoader.defineClass(ClassLoader.java:791) 
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) 
    at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2823) 
    at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1160) 
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1655) 
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1533) 
    at org.hibernate.cfg.Configuration.reset(Configuration.java:322) 
    at org.hibernate.cfg.Configuration.<init>(Configuration.java:261) 
    at org.hibernate.cfg.Configuration.<init>(Configuration.java:265) 
    at org.hibernate.ejb.Ejb3Configuration.<clinit>(Ejb3Configuration.java:150) 
    at org.hibernate.ejb.HibernatePersistence.createContainerEntityManagerFactory(HibernatePersistence.java:71) 
    at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:257) 
    at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:310) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1514) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1452) 
    ... 65 more 
Caused by: java.lang.ClassNotFoundException: org.hibernate.util.DTDEntityResolver 
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1688) 
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1533) 

Mi configuración es la siguiente:

<!-- Holding Properties for hibernate --> 
    <context:property-placeholder location="classpath:hibernate.properties"/> 

    <!-- Configure annotated beans --> 
    <context:annotation-config /> 
    <context:component-scan base-package="com.mypackage" /> 

    <!-- Drives transactions using local JPA APIs --> 
    <tx:annotation-driven transaction-manager="transactionManager"/> 
    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager" 
     p:entityManagerFactory-ref="entityManagerFactory"/> 

    <!-- Creates a EntityManagerFactory for use with the Hibernate JPA provider --> 
    <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" 
     p:dataSource-ref="dataSource" 
     p:packagesToScan="com.mypackage.entity" 
     p:jpaVendorAdapter-ref="jpaAdapter"/> 

    <bean id="jpaAdapter" class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" 
       p:showSql="true" 
       p:generateDdl="false" 
       p:database="MYSQL" 
       p:databasePlatform="org.hibernate.dialect.MySQL5InnoDBDialect" /> 

    <!-- Deploys datasource--> 
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" 
     p:driverClassName="com.mysql.jdbc.Driver" 
     p:url="jdbc:mysql://localhost:${mysql.port}/?zeroDateTimeBehavior=convertToNull" 
     p:username="bla" 
     p:password="bla123"/> 

    <bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" /> 

    <bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor" /> 

Algunas de las dependencias son:

<dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-core</artifactId> 
     <version>${hibernate.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-annotations</artifactId> 
     <version>3.5.6-Final</version> 
     <exclusions> 
      <exclusion> 
       <groupId>org.hibernate</groupId> 
       <artifactId>ejb3-persistence</artifactId>      
      </exclusion> 
      <exclusion> 
       <groupId>org.hibernate</groupId> 
       <artifactId>hibernate-core</artifactId>     
      </exclusion> 
     </exclusions> 
    </dependency> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-entitymanager</artifactId> 
     <version>${hibernate.version}</version> 
     <exclusions> 
      <exclusion> 
       <groupId>javax.transaction</groupId> 
       <artifactId>jta</artifactId> 
      </exclusion> 
      <exclusion> 
       <groupId>jboss</groupId> 
       <artifactId>javassist</artifactId> 
      </exclusion> 
      <exclusion> 
       <groupId>org.hibernate</groupId> 
       <artifactId>hibernate-annotations</artifactId> 
      </exclusion> 
     </exclusions> 
    </dependency> 

    <properties> 
     <hibernate.version>4.0.1.Final</hibernate.version> 
    </properties> 

y la versión de la primavera: 3.1.0.RELEASE

Supongo que algo está intentando leer un archivo xml. No hay configuraciones hibernate xml para la hibernación que no sea el archivo de propiedades. Persistence.xml no existe en la configuración actual. ¿Por qué o quién busca una clase que no existe en hibernate 4.0.1?

¡Cualquier ayuda sería muy apreciada!

+0

NoClassDefFoundError significa específicamente que una clase que estaba disponible en tiempo de compilación no está en el classpath en tiempo de ejecución. ¿Estás seguro de que has actualizado completamente tus dependencias? –

+0

No uso 'hibernate-anotaciones', pero parece extraño mezclar la versión' 3.5.6' de las anotaciones y '4.0.1' del núcleo. ¿Te has asegurado de que esto sea correcto? – beerbajay

+0

Yo diría que sí, pero aparentemente estoy equivocado, entonces ¿cómo puedo verificarlo? Estoy buscando la ubicación de este archivo y parece que se ha omitido de Hibernate 4+. Una búsqueda de Google en esta clase muestra que solo existe en versiones debajo de Hibernate 4 – mosgjig

Respuesta

70

por la Hibernate annotations 3.5 documentation: *

Hibernate 3.5 y en adelante contiene anotaciones de Hibernate.

debería eliminar la dependencia de hibernate-annotations, y quitar los exclude s de la dependencia hibernate-entitymanager. En general, no debe mezclar versiones de paquetes dependientes.

* y el comentario de JB Nizet.

+0

WOW, la primera vez que soluciono la dependencia * eliminando * algo, ¡y funciona! – h22

0

Añadir esta dependencia a su pom.xml

<dependency> 
    <groupId>org.hibernate</groupId> 
    <artifactId>tck-utils-api</artifactId> 
    <version>0.9.1</version> 
</dependency> 
0

que tenía el mismo problema ahora es muy bien con mis estas dependencias.

<properties> 
    <spring.version>4.0.5.RELEASE</spring.version> 
    <junit.version>4.11</junit.version> 
    <jdk.version>1.6</jdk.version> 
</properties> 

<dependencies> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>3.8.1</version> 
     <scope>test</scope> 
    </dependency> 

    <!-- Spring dependencies --> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-core</artifactId> 
     <version>${spring.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-context</artifactId> 
     <version>${spring.version}</version> 
    </dependency> 

    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-web</artifactId> 
     <version>${spring.version}</version> 
    </dependency> 

    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-webmvc</artifactId> 
     <version>${spring.version}</version> 
    </dependency> 

    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-orm</artifactId> 
     <version>${spring.version}</version> 
    </dependency> 

    <!-- Servlet --> 
    <dependency> 
     <groupId>javax.servlet</groupId> 
     <artifactId>servlet-api</artifactId> 
     <version>3.0-alpha-1</version> 
    </dependency> 

    <!-- JSTL --> 
    <dependency> 
     <groupId>jstl</groupId> 
     <artifactId>jstl</artifactId> 
     <version>1.2</version> 
    </dependency> 


    <!-- Apache Commons Upload --> 
    <dependency> 
     <groupId>commons-fileupload</groupId> 
     <artifactId>commons-fileupload</artifactId> 
     <version>1.2.2</version> 
    </dependency> 

    <!-- Apache Commons Upload --> 
    <dependency> 
     <groupId>commons-io</groupId> 
     <artifactId>commons-io</artifactId> 
     <version>1.3.2</version> 
    </dependency> 

    <!-- MYSQL dependency --> 
    <dependency> 
     <groupId>mysql</groupId> 
     <artifactId>mysql-connector-java</artifactId> 
     <version>5.1.6</version> 
    </dependency> 

    <!-- Hibernate --> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-core</artifactId> 
     <version>4.3.5.Final</version> 
    </dependency> 

    <!-- If using JPA (2), add: --> 


    <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-api</artifactId> 
     <version>1.5.6</version> 
    </dependency> 

    <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-log4j12</artifactId> 
     <version>1.5.6</version> 
    </dependency> 

    <dependency> 
     <groupId>c3p0</groupId> 
     <artifactId>c3p0</artifactId> 
     <version>0.9.1.2</version> 
    </dependency> 

    <dependency> 
     <groupId>org.javassist</groupId> 
     <artifactId>javassist</artifactId> 
     <version>3.18.1-GA</version> 
    </dependency> 

</dependencies> 
0

me había enfrentado misma edición, después de la eliminación de dependencias para la anotación de hibernación, yo era capaz de ejecutar el código correctamente.

Cuestiones relacionadas