2016-06-04 5 views
5

비슷한 게시글을 SessionFactory로 둘러보고 Main()이 누락되었습니다. 내 문제는 그들과 관련이 없다. 항아리가 불일치인지 확실하지 않습니다. 내가 사용하고있는 jar 파일을 아래HibernateTemplate이 java.lang.NoSuchMethodError를 던지고 있습니다 : org.hibernate.Session.getFlushMode() - Spring4.2.6, Hibernate5.2

Exception in thread "main" java.lang.NoSuchMethodError: org.hibernate.Session.getFlushMode()Lorg/hibernate/FlushMode; 
at org.springframework.orm.hibernate5.HibernateTemplate.checkWriteOperationAllowed(HibernateTemplate.java:1125) 
at org.springframework.orm.hibernate5.HibernateTemplate$12.doInHibernate(HibernateTemplate.java:619) 
at org.springframework.orm.hibernate5.HibernateTemplate$12.doInHibernate(HibernateTemplate.java:616) 
at org.springframework.orm.hibernate5.HibernateTemplate.doExecute(HibernateTemplate.java:341) 
at org.springframework.orm.hibernate5.HibernateTemplate.executeWithNativeSession(HibernateTemplate.java:309) 
at org.springframework.orm.hibernate5.HibernateTemplate.save(HibernateTemplate.java:616) 
at com.nougain.springtraining.hibernate.CustomerDAOImpl.save(CustomerDAOImpl.java:37) 
at com.nougain.springtraining.hibernate.Client_SpringHibernate.testSpringHibernate(Client_SpringHibernate.java:29) 
at com.nougain.springtraining.hibernate.Client_SpringHibernate.main(Client_SpringHibernate.java:12) 

됩니다 :

<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/> 
<classpathentry kind="lib" path="C:/Java Stuff/spring-framework-4.2.6.RELEASE/libs/spring-beans-4.2.6.RELEASE.jar"/> 
<classpathentry kind="lib" path="C:/Java Stuff/spring-framework-4.2.6.RELEASE/libs/spring-core-4.2.6.RELEASE.jar"/> 
<classpathentry kind="lib" path="C:/Java Stuff/spring-framework-4.2.6.RELEASE/libs/spring-context-4.2.6.RELEASE.jar"/> 
<classpathentry kind="lib" path="C:/Java Stuff/Apache Commons/commons-logging-1.2/commons-logging-1.2.jar"/> 
<classpathentry kind="lib" path="C:/Java Stuff/spring-framework-4.2.6.RELEASE/libs/spring-expression-4.2.6.RELEASE.jar"/> 
<classpathentry kind="lib" path="C:/Java Stuff/jars/javax.inject.jar"/> 
<classpathentry kind="lib" path="C:/Java Stuff/spring-framework-4.2.6.RELEASE/libs/spring-test-4.2.6.RELEASE.jar"/> 
<classpathentry kind="lib" path="C:/Java Stuff/spring-framework-4.2.6.RELEASE/libs/spring-jdbc-4.2.6.RELEASE.jar"/> 
<classpathentry kind="lib" path="C:/Java Stuff/spring-framework-4.2.6.RELEASE/libs/spring-orm-4.2.6.RELEASE.jar"/> 
<classpathentry exported="true" kind="lib" path="C:/Java Stuff/hibernate-release-5.2.0.Final/lib/required/jboss-logging-3.3.0.Final.jar"/> 
<classpathentry kind="lib" path="C:/Java Stuff/Oracle JDBC Driver/ojdbc7.jar"/> 
<classpathentry kind="lib" path="C:/Java Stuff/junit-4.12/junit-4.12.jar"/> 
<classpathentry kind="lib" path="C:/Java Stuff/junit-4.12/hamcrest-core-1.3.jar"/> 
<classpathentry kind="lib" path="C:/Java Stuff/spring-framework-4.2.6.RELEASE/libs/spring-tx-4.2.6.RELEASE.jar"/> 
<classpathentry kind="lib" path="C:/Java Stuff/jars/aopalliance-1.0.jar"/> 
<classpathentry kind="lib" path="C:/Java Stuff/jars/aspectjweaver-1.8.9.jar"/> 
<classpathentry kind="lib" path="C:/Java Stuff/spring-framework-4.2.6.RELEASE/libs/spring-aop-4.2.6.RELEASE.jar"/> 
<classpathentry kind="lib" path="C:/Java Stuff/Apache Commons/commons-dbcp2-2.1.1/commons-dbcp2-2.1.1.jar"/> 
<classpathentry kind="lib" path="C:/Java Stuff/Apache Commons/commons-pool2-2.4.2/commons-pool2-2.4.2.jar"/> 
<classpathentry kind="lib" path="C:/Java Stuff/hibernate-release-5.2.0.Final/lib/required/hibernate-core-5.2.0.Final.jar"/> 
<classpathentry kind="lib" path="C:/Java Stuff/hibernate-release-5.2.0.Final/lib/required/hibernate-jpa-2.1-api-1.0.0.Final.jar"/> 
<classpathentry kind="lib" path="C:/Java Stuff/hibernate-release-5.2.0.Final/lib/required/geronimo-jta_1.1_spec-1.1.1.jar"/> 
<classpathentry kind="lib" path="C:/Java Stuff/hibernate-release-5.2.0.Final/lib/required/dom4j-1.6.1.jar"/> 
<classpathentry kind="lib" path="C:/Java Stuff/hibernate-release-5.2.0.Final/lib/required/hibernate-commons-annotations-5.0.1.Final.jar"/> 
<classpathentry kind="lib" path="C:/Java Stuff/hibernate-release-5.2.0.Final/lib/required/classmate-1.3.0.jar"/> 

DAOImpl 코드를 나는 Hibernate5.2 코드가 JDK8를 사용하여이 예외를 받고있는 샘플 Spring4.2.6을 시도하고있다 스니펫 :

import org.springframework.stereotype.Component; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.orm.hibernate5.HibernateTemplate; 

@Component("customerDAO") 
public class CustomerDAOImpl implements CustomerDAO { 
    @Autowired 
    private HibernateTemplate hibernateTemplate; 

    public CustomerDAOImpl() { 
     System.out.println("___Created CustomerDAOImpl() object"); 
    } 

    @Override 
    public void save(Customer c) { 
     hibernateTemplate.save(c); 
    } 
     ... 
} 

내 구성 파일은 다음과 같습니다.

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
    <property name="locations"> 
     <array> 
      <value>bin/connection.properties</value> 
     </array> 
    </property> 
</bean> 

<bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource"> 
    <property name="driverClassName" value="${driver_class_name}"/> 
    <property name="url" value="${url}"/> 
    <property name="username" value="${username}"/> 
    <property name="password" value="${password}"/> 
    <property name="initialSize" value="${initial_size}"/> 
    <property name="maxTotal" value="${max_size}"/> 
</bean> 

<bean class="org.springframework.orm.hibernate5.LocalSessionFactoryBean"> 
    <property name="dataSource" ref="dataSource" /> 
    <property name="hibernateProperties"> 
     <props> 
      <prop key="hibernate.show_sql">true</prop> 
      <prop key="hibernate.format_sql">true</prop> 
      <prop key="hibernate.use_sql_comments">true</prop> 
      <prop key="hibernate.transaction.factory_class"> 
       org.hibernate.transaction.JDBCTransactionFactory 
      </prop> 
      <prop key="hibernate.hbm2ddl.auto">create</prop> 
     </props> 
    </property> 
    <property name="mappingResources"> 
     <array> 
      <value>Customer.hbm.xml</value> 
     </array> 
    </property> 
</bean> 

도움 주셔서 감사합니다.

+0

여기에 관련 답변이 제공되었습니다. [http://stackoverflow.com/a/37613224/1035593](http://stackoverflow.com/a/37613224/1035593). – rikica

답변

7

내가 가지고있는 오류가 다르긴하지만 Spring 4.2.6을 (아직 며칠 전에 발표 된) Hibernate 5.2.0에서 작동하도록 만들 수 없었다. 나는 여전히 최대 절전 모드 5.1.0을 사용하고있다.

Hibernate 5.1.0에서는 hibernate-core와 hibernate-entitymanager의 두 가지 jar가 필요하다는 것에주의하십시오.

[편집] Spring 4.2.6에서는 선택적 종속성으로 Hibernate 5.0.9를 나열하므로 5.1.0이 제대로 작동하지만 아마이 버전을 고수해야 할 것이다.

봄 4.2.6은 아마도 hibernate 5.2.0과 호환되지 않을 것이다. hibernate의이 버전은 hibernate-core를 hibernate-entitymanager 및 hibernate-java8와 병합하면서 큰 변화를 가져 왔을 것이다.

+0

고마워, 앙드레. 나는 프로그램에서 몇 가지 변경을했고 5.2.0과 마찬가지로 Hibernate 5.0.9에서도 작동했다. 문제가 사라진 이유를 모르겠습니다. 주요 변경 사항은 내가 그랬어 : \t code' \t ' \t \t의 SessionFactory sessionFactory에 = hibernateTemplate.getSessionFactory(); \t \t 세션 세션 = sessionFactory.openSession(); \t \t 트랜잭션 txn = session.beginTransaction(); // <- 삽입하려면 트랜잭션이 필요합니다. 하지만 왜 ?? \t \t session.save (c); \t txn.commit(); – ludwig17

+0

2016 년 6 월 8 일자 제 의견으로 답변을 수락합니다. – ludwig17

+0

5.2 링크로 컴파일했기 때문에 문제가 사라 졌다고 생각합니다. 5.1로 컴파일하고 5.2로 사용하려고하면 작동하지 않을 것이라고 생각합니다. –