2016-05-09 3 views
1

私はSpring MVCとHibernateを使用してアプリケーションを構築しています。私はSpringとHibernateをまだ統合しておらず(どちらにも新規)、最初にHibernateを通してセッションを開くことができるようにしたかったのです。Hibernate経由でOracleに接続しようとするとjava.lang.NoSuchMethodErrorを取得する

私がテストするための簡単な関数を作成し、現在次のエラー受信:

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> 

0123私のプロジェクトのための

ファイル構造:私のアプローチ上

File Structure


思考:私はスローされるエラーは、関数が呼び出される方法に関連する問題に関係していることを理解しています。通常、java.lang.NoSuchMethodErrorは、ライブラリBarの関数Fooが3.0の代わりに2.0を呼び出すときに発生します。私は自分の依存関係を二重にチェックしてプロジェクトを再構築しようとしましたが、私はまだ同じ問題に直面しています。私はまた、接続をテストするためにIntelliJの定型コードをHibernateに試みましたが、まったく同じエラーを受け取りました。

+1

おそらく依存関係の競合があります。あなたはHibernateがバージョンYを必要としている間にいくつかのライブラリのバージョンXを含んでいます。これらの[instructions](https://maven.apache.org/plugins/maven-dependency-plugin/examples/resolving-conflicts-using-the-dependency- tree.html)を参照してください。 – Jesper

+0

@Jesperあなたは正しいです。私のlibにいくつか余分なJARファイルがありました。それらを削除し、今それは魅​​力のように動作します。私はあなたにすべてのクレジットを与えることができるように答えとして投稿してください:) – abhi

答えて

1

おそらく依存関係の競合があります。たとえば、あるライブラリのバージョンXがあり、Hibernateがその同じライブラリのバージョンYを必要としているなどです。

次のようなコマンドを使用して、find dependency conflictsにMavenを使用することができます。

mvn dependency:tree -Dverbose 

これは、依存関係ツリーを印刷して、互いに競合しているどのライブラリを示します。

関連する問題