2016-07-17 26 views
1

Verwendung der Federversion: 4.3.1, Federdaten: 1.10.2, Ruhezustandskern: 5.2.1. mit Postgres-Datenbank pg Anschluss Version: 9.4.1208.jre7 Nach dem Hibernate 5.1.0 bis 5.2.1 aktualisieren, wenn ich versuche, eine Entität unter Ausnahme bekommenMigration zum Ruhezustand Core 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 Config

@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; 
    } 
} 
zu erstellen

Github Code: https://github.com/arun472/spring-data-jpa

+0

Bitte posten Sie Ihre pom.xml, um weiter zu untersuchen. –

+0

Ich habe github link hinzugefügt, wo pom.xml verfügbar ist –

Antwort

0

das sieht seltsam, wie die Methodensignatur Unterstützung für die Hibernate 5.2 API wurde in Spring Framework hinzugefügt 4.3.0.RELEASE, wo zuerst nach getHibernateFlushMode gesucht wird und dann gefolgt von getFlushMode.

Ich würde sagen, wahrscheinlich haben Sie die neuen Hibernate-Bibliotheken auf Ihrem Klassenpfad, aber Sie haben möglicherweise eine ältere Version von Spring Framework im Klassenpfad, die nicht kompatibel ist.

5

Dies sieht wie ein Jar-Konflikt für Spring Framework 4.3.0.RELEASE Version, die Sie gewählt haben. Bitte stufen Sie es auf hibernate-core-5.1.0.Final.jar herunter.

+0

Ja, Methodensignatur für FlushMode enum ist anders, daher tritt dieses Problem auf. Ich habe meine Antwort aktualisiert, um die passende Version von hibernate-core-5.10.Final.jar zu wählen –