2013-12-09 68 views
2

我想升級我的應用程序從休眠3.4到4.1.0最終版本,並獲得下面提到的錯誤。Hibernate 4升級(java.lang.NoSuchMethodError:javax.persistence.spi.PersistenceUnitInfo.getValidationMode())

我現在正在使用spring 3.2。我的pom文件如下所示。

<dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>com.springsource.org.hibernate</artifactId> 
     <version>4.1.0.Final</version> 
     <exclusions> 
      <exclusion> 
       <groupId>commons-logging</groupId> 
       <artifactId>commons-logging</artifactId> 
      </exclusion> 
     </exclusions> 
    </dependency> 
    <!-- Hibernate JPA Provider --> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>com.springsource.org.hibernate.ejb</artifactId> 
     <version>4.1.0.Final</version> 
     <exclusions> 
      <!-- Exclude Commons Logging in favor of SLF4j --> 
      <exclusion> 
       <groupId>org.apache.commons</groupId> 
       <artifactId>com.springsource.org.apache.commons.logging</artifactId> 
      </exclusion> 
     </exclusions> 
    </dependency> 

以下是實體管理器和會話工廠

<bean id="testSessionFactory" 
     class="org.springframework.orm.hibernate4.LocalSessionFactoryBean" 
     autowire="byName"> 
     <property name="dataSource" ref="testDataSource" /> 
     <property name="annotatedClasses"> 
      <list> 
       <value>test</value> 
      </list> 
     </property> 
     <property name="hibernateProperties"> 
      <props> 
       <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> 
       <prop key="hibernate.show_sql">false</prop> 
       <prop key="hibernate.hbm2ddl.auto">validate</prop> 
      </props> 
     </property> 
    </bean> 
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> 
     <property name="entityManagerFactory" ref="entityManagerFactory" /> 
    </bean> 
<bean id="entityManagerFactory" 
     class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
     <property name="persistenceUnitName" value="unit" /> 
     <property name="jpaVendorAdapter"> 
      <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"> 
       <property name="generateDdl" value="false" /> 
       <property name="showSql" value="true" /> 
      </bean> 
     </property> 
     <property name="dataSource"> 
      <ref bean="datasource" /> 
     </property> 
     <property name="jpaProperties"> 
      <props> 
       <prop key="hibernate.generate_statistics">false</prop> 
       <prop key="hibernate.cache.use_second_level_cache">false</prop> 
       <prop key="hibernate.cache.use_query_cache">false</prop> 
       <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> 
       <prop key="hibernate.show_sql">"true"</prop> 
      </props> 
     </property> 
    </bean> 

以下是錯誤。

[ERROR] [main] 12-09 15:05:55,168 [ContextLoader] - Context initialization failed 
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [api-service.xml]: Invocation of init method failed; nested exception is java.lang.NoSuchMethodError: javax.persistence.spi.PersistenceUnitInfo.getValidationMode()Ljavax/persistence/ValidationMode; 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1512) 
    at 

Caused by: java.lang.NoSuchMethodError: javax.persistence.spi.PersistenceUnitInfo.getValidationMode()Ljavax/persistence/ValidationMode; 
    at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:633) 
    at org.hibernate.ejb.HibernatePersistence.createContainerEntityManagerFactory(HibernatePersistence.java:73) 
    at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:288) 
    at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:310) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1571) 
    at 
[ERROR] [main] 12-09 15:05:55,169 [log] - Failed startup of context [email protected]{/,file:/Users/Aanchal/avos/platform/src/avos-api/src/main/webapp/} 
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [api-service.xml]: Invocation of init method failed; nested exception is java.lang.NoSuchMethodError: javax.persistence.spi.PersistenceUnitInfo.getValidationMode()Ljavax/persistence/ValidationMode; 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1512) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:521) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458) 

Caused by: java.lang.NoSuchMethodError: javax.persistence.spi.PersistenceUnitInfo.getValidationMode()Ljavax/persistence/ValidationMode; 
    at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:633) 
    at org.hibernate.ejb.HibernatePersistence.createContainerEntityManagerFactory(HibernatePersistence.java:73) 

我按照以下鏈接升級應用程序。幫助表示讚賞。

+0

忘記把鏈接 - http://spring.io/blog/2012/04/06/migrating-to-spring- 3-1-和休眠-4-1 –

回答

2

您的運行時是Java EE 5(或更早),而代碼期望Java EE 6.查看Java EE 5's PersistenceUnitInfo沒有這樣的方法getValidationModel()。你也許能夠解決這個問題只需通過升級運行時的Java EE 6

1

我使用的1.0.0版本的javax持久的lib

<dependency> 
<groupId>javax.persistence</groupId> 
<artifactId>com.springsource.javax.persistence</artifactId> 
<version>2.0.0</version> 
</dependency> 

更改版本固定它,

0

在我的情況下,我使用spring-boot-jpajavax.persistence.jpa這導致依賴關係崩潰。 刪除javax.persistence.jpa會很有幫助。

檢查你的依賴關係,檢查一些依賴關係是否重複。 (MVN依賴關係樹) (在理念點擊Maven的工具,然後單擊顯示相關