2016-05-09 4 views
1

Я создаю приложение, используя Spring MVC и Hibernate. Я еще не интегрировал Hibernate с Spring (новый для обоих) и хотел, чтобы сеанс можно было сначала открыть с помощью Hibernate.Получение java.lang.NoSuchMethodError при попытке подключения к Oracle через Hibernate

Я создал простую функцию для тестирования и в настоящее время получаю следующее сообщение об ошибке:

Exception in thread "main" java.lang.NoSuchMethodError: org.hibernate.integrator.internal.IntegratorServiceImpl.(Ljava/util/LinkedHashSet;Lorg/hibernate/boot/registry/classloading/spi/ClassLoaderService;)V

Мои журналы говорят мне, что ошибка возникает, когда я пытаюсь использовать вызов в StandardServiceRegistryBuilder().applySettings() функции.


Я поместил мой пример функции ниже, которая пытается создать соединение (обратите внимание, что он является недействительным, и на самом деле ничего не делать в течение другого не пытаться поймать каких-либо исключений)

public static void main (String [] args) { 
     testHibernate(); 
    } 
public static void testHibernate() { 
     try { 
      String hibernateFilePath = "src/main/java/hibernate.cfg.xml"; 
      File hibernateFile = new File(hibernateFilePath); 
      Configuration configuration = new Configuration().configure(hibernateFile); 
      StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()); 
      SessionFactory factory = configuration.buildSessionFactory(builder.build()); 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

Вот мой hibernate.cfg.xml файл:

<?xml version='1.0' encoding='utf-8'?> 
<!DOCTYPE hibernate-configuration PUBLIC 
     "-//Hibernate/Hibernate Configuration DTD//EN" 
     "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> 
<hibernate-configuration> 
    <session-factory> 
     <property name="connection.url">jdbc:oracle://servername.website.com:12345/dbname678</property> 
     <property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property> 
     <property name="connection.username">username</property> 
     <property name="connection.password">password</property> 
    </session-factory> 
</hibernate-configuration> 

структура

файла для моего проекта:

File Structure


Мысль о моем подходе: Я понимаю, что ошибка броска имеет отношение к проблеме, связанной с тем, как называется функция. Обычно java.lang.NoSuchMethodError возникает, когда функция Foo библиотеки Bar вызывает версию 2.0 вместо 3.0. Я дважды проверял свои зависимости и пытался перестроить проект, но я все еще сталкиваюсь с той же проблемой. Я также попробовал шаблонный код IntelliJ для Hibernate для проверки соединений и по-прежнему получил ту же ошибку.

+1

У вас, вероятно, есть конфликт зависимости; вы включаете версию X некоторой библиотеки, в то время как Hibernate нуждается в версии Y. См. эти [инструкции] (https://maven.apache.org/plugins/maven-dependency-plugin/examples/resolving-conflicts-using-the-dependency- tree.html) о том, как найти конфликты с Maven. – Jesper

+0

@Jesper вы правы. Были ли некоторые дополнительные файлы JAR, лежащие в моей библиотеке. Удалили их, и теперь это работает как шарм. Пожалуйста, опубликуйте его как ответ, чтобы я мог дать вам весь кредит :) – abhi

ответ

1

У вас, вероятно, есть конфликт зависимости, например, у вас есть версия X некоторой библиотеки, в то время как Hibernate нуждается в версии Y той же библиотеки.

Вы можете использовать Maven для find dependency conflicts, используя команду:

mvn dependency:tree -Dverbose 

Это будет печатать дерево зависимостей и указывает, какие библиотеки находятся в конфликте друг с другом.

Смежные вопросы