2016-07-17 5 views
1

春バージョンの使用:4.3.1、春データ:1.10.2、休止状態コア:5.2.1。私は例外コアへの移行5.2.1 ava.lang.NoSuchMethodError:org.hibernate.Session.getFlushMode()Lorg/hibernate/FlushMode;

at java.lang.Thread.run(Thread.java:745) 
Caused by: org.springframework.transaction.CannotCreateTransactionException: Could not open JPA EntityManager for transaction; nested exception is java.lang.NoSuchMethodError: org.hibernate.Session.getFlushMode()Lorg/hibernate/FlushMode; 
    at org.springframework.orm.jpa.JpaTransactionManager.doBegin(JpaTransactionManager.java:431) 
    at org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:373) 
    at org.springframework.transaction.interceptor.TransactionAspectSupport.createTransactionIfNecessary(TransactionAspectSupport.java:427) 
    at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:276) 
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) 
    at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:655) 
    at com.cando.person.controller.UserController$$EnhancerBySpringCGLIB$$250a315a.createDefaultUser(<generated>) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:221) 
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:136) 
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:114) 
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827) 
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:738) 
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85) 
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:963) 
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:897) 
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970) 
    ... 31 more 
Caused by: java.lang.NoSuchMethodError: org.hibernate.Session.getFlushMode()Lorg/hibernate/FlushMode; 
    at org.springframework.orm.jpa.vendor.HibernateJpaDialect.prepareFlushMode(HibernateJpaDialect.java:187) 
    at org.springframework.orm.jpa.vendor.HibernateJpaDialect.beginTransaction(HibernateJpaDialect.java:173) 
    at org.springframework.orm.jpa.JpaTransactionManager.doBegin(JpaTransactionManager.java:380) 
    ... 51 more 

Javaの設定

@Configuration 
@EnableTransactionManagement 
@EnableJpaRepositories("com.cando.**.repository") 
@PropertySource("classpath:spring.properties") 
public class SpringDataConfig 
{ 
    @Autowired 
    private Environment env; 

    // Declare a datasource 
    @Bean 
    public DataSource dataSource() 
    { 
     try 
     { 
      boolean productionProfile = checkProfileIsActive(IConstants.PROFILE_PRODUCTION); 
      String driverClassName = productionProfile ? env.getRequiredProperty("production.app.jdbc.driverClassName") : env.getRequiredProperty("dev.app.jdbc.driverClassName"); 
      String url = productionProfile ? env.getRequiredProperty("production.app.jdbc.url") : env.getRequiredProperty("dev.app.jdbc.url"); 
      String username = productionProfile ? env.getRequiredProperty("production.app.jdbc.username") : env.getRequiredProperty("dev.app.jdbc.username"); 
      String password = productionProfile ? env.getRequiredProperty("production.app.jdbc.password") : env.getRequiredProperty("dev.app.jdbc.password"); 

      System.out.println(driverClassName + " " + url + " " + username + " " + password); 

      DriverManagerDataSource dataSource = new DriverManagerDataSource(); 
      dataSource.setDriverClassName(driverClassName); 
      dataSource.setUrl(url); 
      dataSource.setUsername(username); 
      dataSource.setPassword(password); 
      return dataSource; 
     } 
     catch (Exception e) 
     { 
      throw new RuntimeException(e); 
     } 
    } 

    // Declare a JPA entityManagerFactory 
    @Bean 
    public LocalContainerEntityManagerFactoryBean entityManagerFactory() 
    { 

     LocalContainerEntityManagerFactoryBean entityManagerFactoryBean = new LocalContainerEntityManagerFactoryBean(); 
     entityManagerFactoryBean.setDataSource(dataSource()); 
     entityManagerFactoryBean.setPackagesToScan("com.cando.**.model"); 


     Properties properties = new Properties(); 
     properties.put("hibernate.dialect", "org.hibernate.dialect.PostgreSQL95Dialect"); 
     properties.put("hibernate.show_sql", false); 
     properties.put("hibernate.format_sql", false); 
     //properties.put("hibernate.hbm2ddl.auto", "update"); 
     properties.put("hibernate.hbm2ddl.auto", "create-drop"); 


     entityManagerFactoryBean.setJpaProperties(properties); 

     HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter(); 
     vendorAdapter.setGenerateDdl(Boolean.TRUE); 
     vendorAdapter.setShowSql(Boolean.TRUE); 

     entityManagerFactoryBean.setJpaVendorAdapter(vendorAdapter); 

     return entityManagerFactoryBean; 
    } 

    // Declare a transaction manager 
    @Bean 
    public JpaTransactionManager transactionManager() 
    { 
     JpaTransactionManager transactionManager = new JpaTransactionManager(); 
     transactionManager.setEntityManagerFactory(entityManagerFactory().getObject()); 
     return transactionManager; 
    } 

    private boolean checkProfileIsActive(String profileName) 
    { 
     for (String profile : env.getActiveProfiles()) 
     { 
      if (StringUtils.equals(profileName, profile)) 
      { 
       return true; 
      } 
     } 
     return false; 
    } 
} 
の下になってエンティティを作成しようとしていたときに5.2.1への休止5.1.0からアップグレードした後9.4.1208.jre7 :PostgresデータベースPGコネクタのバージョンを使用して

のGitHubコード:https://github.com/arun472/spring-data-jpa

+0

詳細については、pom.xmlを送信してください。 –

+0

pom.xmlが利用可能なgithubリンクを追加しました –

答えて

0

休止5.2 APIのメソッドシグネチャサポートはスプリングフレームワークに加え、これは奇妙に見えます4.3.0.RELEASE具体的にはgetHibernateFlushModeが最初に検索され、次にgetFlushModeが追跡されます。

あなたのクラスパスに新しいHibernateライブラリがある可能性は高いですが、互換性のない古いクラスのSpring Frameworkがクラスパスにある可能性があります。

5

これは、選択したSpring Framework 4.3.0.RELEASEバージョンのJarの競合のように見えます。これをhibernate-core-5.1.0.Final.jarにダウングレードしてください。

+0

はい、FlushMode列挙型のメソッドシグネチャが異なるため、この問題が発生します。私は自分の答えを更新して、適切なバージョンのhibernate-core-5.10.Final.jarを選択しました –