2016-06-04 19 views
5

Ich habe ähnliche Postings mit SessionFactory und fehlende Main() gesucht. Mein Problem ist nicht mit ihnen verbunden. Nicht sicher, ob ein Glas nicht übereinstimmt. Ich versuche, eine Probe Spring4.2.6 mit Hibernate5.2 Code JDK8 verwenden und diese Ausnahme erhalten:HibernateTemplate wirft 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) 

unten ist die JAR-Dateien Ich verwende:

<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 Code Schnipsel:

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); 
    } 
     ... 
} 

Meine Konfigurationsdatei sieht wie folgt aus:

<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> 

Danke für Ihre Hilfe.

+0

Relevante Antwort wurde hier zur Verfügung gestellt: http://stackoverflow.com/a/37613224/1035593](http://stackoverflow.com/a/37613224/1035593). – rikica

Antwort

7

Ich konnte Frühling 4.2.6 noch nicht machen, um mit Hibernate 5.2.0 (das gerade vor einigen Tagen veröffentlicht wurde) zu arbeiten, obwohl der Fehler, den ich bekam, anders ist. Ich benutze immer noch Hibernate 5.1.0.

Beachten Sie, dass Sie auf Hibernate 5.1.0 zwei Gläser benötigen: Hibernate-Core und Hibernate-Entitymanager.

[Bearbeiten] Frühling 4.2.6 listet Hibernate 5.0.9 als optionale Abhängigkeit, so dass Sie wahrscheinlich bei dieser Version bleiben sollten, obwohl 5.1.0 funktioniert gut für mich.

Spring 4.2.6 ist wahrscheinlich nicht kompatibel mit Hibernate 5.2.0, da diese Version von Hibernate einige große Änderungen mit sich brachte, indem Hibernate-Core mit Hibernate-Entitymanager und Hibernate-Java8 zusammengeführt wurde.

+0

Danke, Andre. Ich habe einige Änderungen am Programm vorgenommen und es funktionierte mit Hibernate 5.0.9 SOWIE mit 5.2.0. Ich weiß nicht, was das Problem verschwinden ließ. Die wichtigsten Änderungen ich getan habe: \t \t 'code' \t \t Sessionsession = hibernateTemplate.getSessionFactory(); \t \t Sitzungssitzung = sessionFactory.openSession(); \t \t Transaktion txn = session.beginTransaction(); // <- Hier muss eine Transaktion eingefügt werden. Aber warum???? \t \t session.save (c); \t txn.commit(); – ludwig17

+0

Akzeptieren Sie dies als eine Antwort mit meinem Kommentar vom 8. Juni 2016. – ludwig17

+0

Ich denke, das Problem verschwand, weil Sie mit 5.2 verknüpft kompiliert. Versuchen Sie, mit 5.1 zu kompilieren und mit 5.2 zu verwenden, ich denke, es wird nicht funktionieren. –