example - java.lang.NoSuchMethodError: javax.persistence.spi.PersistenceUnitInfo.getValidationMode() Ljavax/persistence/ValidationMode;
spring repository (1)
Estoy escribiendo un ejemplo para los datos de primavera. Este es mi spring.xml
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd">
<context:component-scan base-package="com.currencyconverter.entity" />
<bean
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="database.properties" />
</bean>
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="${driver.name}" />
<property name="url" value="${database.url}" />
<property name="username" value="${database.username}" />
<property name="password" value="${database.password}" />
</bean>
<bean id="currencyRateImpl" class="com.currencyconverter.dao.CurrencyRateImpl">
<property name="dataSource" ref="dataSource" />
</bean>
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="packagesToScan" value="com.currencyconverter.entity" />
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" />
</property>
<property name="jpaProperties">
<props>
<prop key="hibernate.hbm2ddl.auto">create-drop</prop>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
</props>
</property>
</bean>
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
Y estas son dependencias en mi pom.xml
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>3.2.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>3.2.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>3.2.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>3.2.5.RELEASE</version>
</dependency>
<dependency>
<groupId>javax.persistence</groupId>
<artifactId>persistence-api</artifactId>
<version>1.0.2</version>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-jpa</artifactId>
<version>1.5.0.RELEASE</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>4.3.0.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate.javax.persistence</groupId>
<artifactId>hibernate-jpa-2.1-api</artifactId>
<version>1.0.0.Final</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jpa</artifactId>
<version>2.0.2</version>
</dependency>
</dependencies>
No he usado persistence.xml . Estoy siguiendo la excepción
Causado por: java.lang.NoSuchMethodError: javax.persistence.spi.PersistenceUnitInfo.getValidationMode () Ljavax / persistence / ValidationMode; en org.hibernate.jpa.boot.internal.PersistenceUnitInfoDescriptor.getValidationMode (PersistenceUnitInfoDescriptor.java:99) en org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.mergePropertySources (EntityManagerFactoryBuilderImpl.java:567) en org.hibernate.jpa.boot .internal.EntityManagerFactoryBuilderImpl. (EntityManagerFactoryBuilderImpl.java:212) en org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl. (EntityManagerFactoryBuilderImpl.java:186) en org.hibernate.jpa.boot.spi.Bootstrap.getEntityManagerFactoryBuilder (Bootstrap.java : 45) en org.hibernate.jpa.boot.spi.Bootstrap.getEntityManagerFactoryBuilder (Bootstrap.java:57) en org.hibernate.jpa.HibernatePersistenceProvider.createContainerEntityManagerFactory (HibernatePersistenceProvider.java:150) en org.hibernate.ejb.HibernatePersistence. createContainerEntityManagerFactory (HibernatePersistence.java:67) en org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory (LocalContain erEntityManagerFactoryBean.java:288) en org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet (AbstractEntityManagerFactoryBean.java:310) en org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods (AbstractAutowireCapableBeanFactory.java:1571) en org.springframework .beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean (AbstractAutowireCapableBeanFactory.java:1509) ... 12 más
¿Qué hay de malo con el código? Las dependencias y las versiones son correctas. O bien persistance.xml es necesario para la primavera 3.2. En caso afirmativo, ¿qué debería contener?
Este error se produce porque se trae la API JPA 1, pero el método getValidationMode existe solo desde JPA 2.
En lugar de seguir
<dependency>
<groupId>javax.persistence</groupId>
<artifactId>persistence-api</artifactId>
<version>1.0.2</version>
</dependency>
por ejemplo, uno ofrecido por Hibernate puede ser utilizado:
<dependency>
<groupId>org.hibernate.javax.persistence</groupId>
<artifactId>hibernate-jpa-2.0-api</artifactId>
<version>1.0.1.Final</version>
</dependency>