2016-06-04 29 views
5

Tôi đã xem các bài đăng tương tự với SessionFactory và thiếu Main(). Vấn đề của tôi không liên quan đến chúng. Không chắc chắn nếu bất kỳ bình nào không phù hợp. Tôi đang cố gắng một Spring4.2.6 mẫu với Hibernate5.2 mã sử dụng JDK8 và nhận được ngoại lệ này:HibernateTemplate đang ném 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) 

Dưới đây là các tập tin jar Tôi đang sử dụng:

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

đang DAOImpl snippet:

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

Tệp cấu hình của tôi trông giống như:

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

Cảm ơn sự giúp đỡ của bạn.

+0

Câu trả lời có liên quan được cung cấp tại đây: [http://stackoverflow.com/a/37613224/1035593](http://stackoverflow.com/a/37613224/1035593). – rikica

Trả lời

7

Tôi vẫn không thể làm cho Spring 4.2.6 hoạt động với Hibernate 5.2.0 (được phát hành vài ngày trước), mặc dù lỗi tôi nhận được là khác nhau. Tôi vẫn đang sử dụng Hibernate 5.1.0 sau đó.

Lưu ý rằng trên Hibernate 5.1.0 bạn cần hai lọ: hibernate-core và hibernate-entitymanager.

[EDIT] Mùa xuân 4.2.6 liệt kê Hibernate 5.0.9 là tùy chọn tùy chọn, do đó bạn có thể nên gắn bó với phiên bản đó, mặc dù 5.1.0 hoạt động tốt cho tôi.

Mùa xuân 4.2.6 có thể không tương thích với Hibernate 5.2.0 vì phiên bản hibernate này mang lại một số thay đổi lớn, hợp nhất hibernate-core với hibernate-entitymanager và hibernate-java8.

+0

Cảm ơn, Andre. Tôi đã thực hiện vài thay đổi trong chương trình và nó đã làm việc với Hibernate 5.0.9 AS WELL AS với 5.2.0. Tôi không biết điều gì làm cho vấn đề biến mất. Những thay đổi chính tôi đã làm: \t \t 'code' \t \t SessionFactory sessionfactory = hibernateTemplate.getSessionFactory(); \t \t Phiên phiên = sessionFactory.openSession(); \t \t Giao dịch txn = session.beginTransaction(); // <- Giao dịch là cần thiết ở đây để chèn. Nhưng tại sao???? \t \t session.save (c); \t txn.commit(); – ludwig17

+0

Chấp nhận điều này làm câu trả lời với nhận xét của tôi ngày 8 tháng 6 năm 2016. – ludwig17

+0

Tôi nghĩ rằng sự cố đã biến mất vì bạn đã biên dịch với 5.2 được liên kết. Hãy thử để biên dịch với 5.1 và sử dụng với 5.2, tôi nghĩ rằng nó sẽ không hoạt động. –

Các vấn đề liên quan