2017-01-20 21 views
5

khi sử dụng Hibernate 5.2.7 trong một dự án Gradle Java để kết nối với một MariaDB 10.1.19, tôi nhận được một Exception in thread "main" java.lang.NoSuchMethodError: org.hibernate.engine.spi.SessionFactoryImplementor.getProperties()Ljava/util/Map;Hibernate 5.2.7 - java.lang.NoSuchMethodError: org.hibernate.engine.spi.SessionFactoryImplementor.getProperties() Ljava/util/Map;

Các stacktrace hoàn

Exception in thread "main" java.lang.NoSuchMethodError: org.hibernate.engine.spi.SessionFactoryImplementor.getProperties()Ljava/util/Map; 
at org.hibernate.internal.CacheImpl.<init>(CacheImpl.java:71) 
at org.hibernate.engine.spi.CacheInitiator.initiateService(CacheInitiator.java:28) 
at org.hibernate.engine.spi.CacheInitiator.initiateService(CacheInitiator.java:20) 
at org.hibernate.service.internal.SessionFactoryServiceRegistryImpl.initiateService(SessionFactoryServiceRegistryImpl.java:58) 
at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:259) 
at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:233) 
at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:210) 
at org.hibernate.service.internal.SessionFactoryServiceRegistryImpl.getService(SessionFactoryServiceRegistryImpl.java:77) 
at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:240) 
at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:445) 
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:710) 
at quantitativeAnalysis.backend.dataCollector.dataCollectorManager.createFactory(dataCollectorManager.java:280) 
at quantitativeAnalysis.volatilityAnalyzer.volatilityDynamicImpl.openInstance(volatilityDynamicImpl.java:18) 
at frontend.MainFrame.main(MainFrame.java:96) 

Tôi đã thử nhiều cách tiếp cận (phiên bản Hibernate khác 5.2.65.2.3) và tìm kiếm trên Internet để được trợ giúp nhưng không có đề xuất nào hoạt động.

Các ngoại lệ xảy ra ở đây:

Configuration configuration = new Configuration().configure(); 

    StandardServiceRegistryBuilder ssrb = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()); 
    try{ 
     factory = configuration.buildSessionFactory(ssrb.build()); 
    }catch(Exception ex){ 
    System.err.println("Failed to configure Sessionfactory"); 
    ex.printStackTrace(); 
} 

Tôi cũng đã thử các mã sau đây dẫn đến cùng một kết quả:

final StandardServiceRegistry registry = new StandardServiceRegistryBuilder() 
    .configure() // configures settings from hibernate.cfg.xml 
    .build(); 

try { 
    factory = new MetadataSources(registry).buildMetadata().buildSessionFactory(); 
    }catch(Exception ex){ 
    System.err.println("Failed to configure Sessionfactory"); 
    ex.printStackTrace(); 
    } 

hibernate.cfg.xml của tôi trông như thế này

<session-factory> 

    <!-- Database connection settings --> 
    <!-- <property name="connection.driver_class">com.mysql.jdbc.Driver</property> --> 
    <property name="connection.driver_class">com.mysql.cj.jdbc.Driver</property>   
    <property name="connection.url">jdbc:mysql://localhost:3307/VolatilityData</property> 
    <property name="connection.username">XXX</property> 
    <property name="connection.password">XXX</property> 
    <property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property> 


    <!-- --> 
    <property name="hbm2dll.auto">create</property> 

    <!-- mapping content --> 
    <mapping resource="resources/BitcoinDaysDestroyed.hbm.xml"/> 
    <mapping resource="resources/BitcoinPrice.hbm.xml"/> 
    <mapping resource="resources/BitcoinTransactions.hbm.xml"/> 

</session-factory> 

Các lọ tôi bao gồm với Gradle như sau:

// Apply the java plugin to add support for Java 
apply plugin: 'java' 

// In this section you declare where to find the dependencies of your project 
repositories { 
// Use jcenter for resolving your dependencies. 
// You can declare any Maven/Ivy/file repository here. 
//jcenter() 
mavenCentral() 

maven { 
url "https://maven.elasticsearch.org/releases" 
    } 
} 

dependencies { 
// The production code uses Guava 
compile 'com.google.guava:guava:20.0' 

//QuantitativeAnalysis 

// https://mvnrepository.com/artifact/com.toedter/jcalendar 
compile group: 'com.toedter', name: 'jcalendar', version: '1.4' 

// https://mvnrepository.com/artifact/javax.persistence/persistence-api 
compile group: 'javax.persistence', name: 'persistence-api', version: '1.0.2' 

// https://mvnrepository.com/artifact/com.googlecode.json-simple/json-simple 
compile group: 'com.googlecode.json-simple', name: 'json-simple', version: '1.1.1' 

// https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient 
compile group: 'org.apache.httpcomponents', name: 'httpclient', version: '4.5.2' 

// https://mvnrepository.com/artifact/org.apache.httpcomponents/httpcore 
compile group: 'org.apache.httpcomponents', name: 'httpcore', version: '4.4.5' 

// https://mvnrepository.com/artifact/org.hibernate/hibernate-core 
//compile group: 'org.hibernate', name: 'hibernate-core', version: '5.2.6.Final' 

//antlr-2.7.7.jar, compiled from src 
compile files('libs/antlr-2.7.7.jar') 

//classmate-1.3.0.jar, compiled from src 
compile files('libs/classmate-1.3.0.jar') 

//dom4j-1.6.1.jar, compiled from src 
compile files('libs/dom4j-1.6.1.jar') 

//antlr-2.7.7.jar, compiled from src 
compile files('libs/geronimo-jta_1.1_spec-1.1.1.jar') 

//jandex-2.0.3.Final.jar, compiled from src 
compile files('libs/jandex-2.0.3.Final.jar') 

//javassist-3.20.0-GA.jar, compiled from src 
compile files('libs/javassist-3.20.0-GA.jar') 

//jboss-logging-3.3.0.Final.jar, compiled from src 
compile files('libs/jboss-logging-3.3.0.Final.jar') 

//hibernate-commons-annotations-5.0.1.Final.jar, compiled from src 
compile files('libs/hibernate-commons-annotations-5.0.1.Final.jar') 

//hibernate-jpa-2.1-api-1.0.0.Final.jar, compiled from src 
compile files('libs/hibernate-jpa-2.1-api-1.0.0.Final.jar') 

//hibernate-core-5.2.7.Final.jar, compiled from src 
compile files('libs/hibernate-core-5.2.7.Final.jar') 

//c3p0-0.9.5.2, compiled from src 
compile files('libs/c3p0-0.9.5.2.jar') 

//hibernate-c3p0-5.2.7.Final.jar, compiled from src 
compile files('libs/hibernate-c3p0-5.2.7.Final.jar') 

//mchange-commons-java-0.2.11.jar, compiled from src 
compile files('libs/mchange-commons-java-0.2.11.jar') 

// https://mvnrepository.com/artifact/mysql/mysql-connector-java 
compile group: 'mysql', name: 'mysql-connector-java', version: '6.0.5' 

//QualitatitveAnalysis 

// https://mvnrepository.com/artifact/log4j/log4j 
compile group: 'log4j', name: 'log4j', version: '1.2.17' 

// https://mvnrepository.com/artifact/org.elasticsearch/elasticsearch 
compile group: 'org.elasticsearch', name: 'elasticsearch', version: '2.1.0' 

// https://mvnrepository.com/artifact/org.elasticsearch.plugin/shield 
compile group: 'org.elasticsearch.plugin', name: 'shield', version: '2.1.0' 

// https://mvnrepository.com/artifact/com.google.code.gson/gson 
compile group: 'com.google.code.gson', name: 'gson', version: '2.8.0' 

// https://mvnrepository.com/artifact/org.twitter4j/twitter4j-core 
compile group: 'org.twitter4j', name: 'twitter4j-core', version: '4.0.6' 

// https://mvnrepository.com/artifact/javax.json/javax.json-api 
compile group: 'javax.json', name: 'javax.json-api', version: '1.0' 

//jReddit Jar, compiled from src 
compile files('libs/jReddit-1.0.4-SNAPSHOT.jar') 

// Use JUnit test framework 
testCompile 'junit:junit:4.12' 
} 

Bất kỳ giúp đỡ hoặc tư vấn được đánh giá cao

+0

Có vẻ như các phiên bản không tương thích của ngủ đông và một lib khác.Vui lòng thêm stacktrace hoàn chỉnh – Jens

+0

http://stackoverflow.com/questions/37861063/spring-4-3-0-release-hibernate-5-0-9-final-missing-sessionfactoryimplementor-g có thể giúp bạn –

+0

Cảm ơn bạn đã trả lời, tôi đã thêm stacktrace hoàn chỉnh. Tôi đã thấy câu hỏi khác trên stackoverflow, nhưng họ sử dụng Spring, mà tôi không sử dụng cho ứng dụng Java của mình. – Marcel

Trả lời

6

Vấn đề này là do có một tuổi, sao chép không tương thích của API JPA trên classpath.

Cụ thể:

  • javax.persistence: kiên trì-api: 1.0.2

Xung đột với phiên bản bên phải của JPA 2.1 API:

  • org.hibernate. javax.persistence: hibernate-jpa-2.1-api: 1.0.0.Final

Thật không may Maven 3 vẫn không thể xử lý các bản phân phối lại của cùng một hiện vật, đôi khi cần thiết.

+0

Xem thêm [Tôi có thể tìm phụ thuộc Mác JPA2 ở đâu?] (Http://stackoverflow.com/q/6836772/772981) – Jarekczek

+0

Tôi đã đề cập đến nó trong câu trả lời của tôi: org.hibernate.javax.persistence: hibernate-jpa-2.1 -api: 1.0.0.Final – Sanne

+0

Nhưng cũng có thể lấy JPA2 mà không có 'org.hibernate'. – Jarekczek

1

Bạn có phiên bản Gradle nào?

Tôi hỏi, vì tôi có cùng lỗi xảy ra sau khi nâng cấp Gradle từ 3.5 thành 4.3. Phiên bản Hibernate tương tự (5.2.9), cùng Boot Spring (1.5.8) nhưng ở Gradle 3.5. - OK, 4.3 không thành công.

Tôi đã thử nghiệm và phiên bản mới nhất làm việc tốt là dành cho tôi 3.5.1. Tôi đã thử nghiệm các phiên bản từ 4.0 đến 4.4-rc-6 (mới nhất tại thời điểm này).

distributionUrl=https\://services.gradle.org/distributions/gradle-3.5.1-all.zip 
Các vấn đề liên quan