2016-07-17 3 views
1

봄 버전 사용 : 4.3.1, 봄 데이터 : 1.10.2, 최대 절전 모드 코어 5.2.1. 사용하여 포스트 그레스 데이터베이스 페이지 커넥터 버전 : 9.4.1208.jre7 내가 예외 아래 점점 엔티티를 생성하려고 할 때 5.2.1에 최대 절전 모드 5.1.0에서 업그레이드 한 후코어로의 마이그레이션 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 

자바 설정

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

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 라이브러리가있을 가능성이 있지만 클래스 패스에 이전 버전의 스프링 프레임 워크가 호환되지 않을 수 있다고 말하고 싶다.

5

사용자가 선택한 Spring Framework 4.3.0.RELEASE 버전에 대한 Jar 충돌로 표시됩니다. 그것을 hibernate-core-5.1.0.Final.jar로 다운 그레이드하십시오.

+0

예, FlushMode 열거 형의 메소드 서명이 다릅니다. 따라서이 문제가 발생합니다. 나는 내 대답을 업데이트하여 hibernate-core-5.10.Final.jar의 적절한 버전을 선택했다. –