2017-01-20 7 views
5

при использовании Hibernate 5.2.7 в проекте Gradle Java для подключения к MariaDB 10.1.19, я получаю 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;

Полный StackTrace

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) 

Я попробовал несколько подходов (другие версии Hibernate 5.2.6 и 5.2.3) и искали в Интернете помощь, но ни одно из предложений не работало.

Исключение происходит здесь:

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

Я также попытался следующий код, ведущий к такому же результату:

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 выглядит следующим образом

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

Банки включаю с Gradle являются следующие:

// 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' 
} 

Любая помощь или совет высоко ценится

+0

Похоже, что несовместимые версии hibernate и другой библиотеки.Пожалуйста, добавьте полный stacktrace – Jens

+0

http://stackoverflow.com/questions/37861063/spring-4-3-0-release-hibernate-5-0-9-final-missing-sessionfactoryimplementor-g может помочь вам –

+0

Спасибо за ваш ответов, я добавил полный стек. Я видел другой вопрос о stackoverflow, но они используют Spring, который я не использую для своего Java-приложения. – Marcel

ответ

6

Эта проблема вызвана тем, что старый, несовместимый копию API JPA на CLASSPATH.

В частности:

  • javax.persistence: живучесть-апи: 1.0.2

Конфликты с правой версии JPA 2.1 API:

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

К сожалению, Maven 3 по-прежнему не может обрабатывать перераспределения тех же артефактов, которые иногда необходимы.

+0

См. Также [Где я могу найти зависимость JPA2 Maven?] (Http://stackoverflow.com/q/6836772/772981) – Jarekczek

+0

Я упомянул об этом в своем ответе: org.hibernate.javax.persistence: hibernate-jpa-2.1 -api: 1.0.0.Final – Sanne

+0

Но также можно получить JPA2 без 'org.hibernate'. – Jarekczek

1

Какая у вас версия Gradle?

Прошу, потому что у меня такая же ошибка, которая возникает после обновления Gradle от 3.5 до 4.3. Тот же вариант спящего режима (5.2.9), тот же весенний ботинок (1.5.8), но в Gradle 3.5. - OK, 4.3 сбой.

Я протестировал, и последняя версия работает отлично для меня 3.5.1. Я тестировал версии от 4.0 до 4.4-rc-6 (последний на данный момент).

distributionUrl=https\://services.gradle.org/distributions/gradle-3.5.1-all.zip