2016-06-14 10 views
0

別の場所に設定ファイルを探し、そしてresourcesフォルダ内の私のhibernate.cfg.xmlファイル(下のスクリーンショット)に設置し続ける:Hibernateは、私は、Eclipse IDEを使用して私のプロジェクトを構築し

enter image description here


問題をDAOクラスでhibernate.cfg.xmlを参照しようとすると発生します。あなたが見ることができるように、私はまだ私のプロジェクトで「正しい」の場所を指しています

private static SessionFactory getSessionFactory() { 
     String hibernatePropsFilePath = "src/main/resources/hibernate.cfg.xml"; 
     File hibernatePropsFile = new File(hibernatePropsFilePath); 

     Configuration configuration = new Configuration(); 
     configuration.configure(hibernatePropsFile); 
     configuration.addAnnotatedClass(MyClass.class); 

     StandardServiceRegistryBuilder serviceRegistryBuilder = new StandardServiceRegistryBuilder() 
       .applySettings(configuration.getProperties()); 
     ServiceRegistry serviceRegistry = serviceRegistryBuilder.build(); 

     return configuration.buildSessionFactory(serviceRegistry); 
    } 

DAOのgetSessionFactory()例:ここで私は私のSessionFactory取得私のコードのスニペットです私はポストマンを使用してテストする場合は、しかし、私は次のエラーを取得する:

HTTP Status 500 - Request processing failed; nested exception is org.hibernate.internal.util.config.ConfigurationException: Specified cfg.xml file [C:\Users\MYUSERNAME\Desktop\src\main\resources\hibernate.cfg.xml] does not exist

私の質問はなぜそれは常に私のデスクトップFに探しています私のプロジェクトでのみ見えるように変更するにはどうしたらいいですか?私はチェックして、私のリソースパスは私のWeb配置アセンブリ(下のスクリーンショット)に存在することを確認しました

enter image description here

+1

として簡単にセッションファクトリを構築することができますが、パスを指定せずにしようとしましたか? 'Configuration configuration = new Configuration()。configure();を使うだけです。 StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder()。 applySettings(configuration.getProperties()); SessionFactory factory = configuration.buildSessionFactory(builder.build()); ' –

+0

@ChetanJadhavCDこれが動作します、ありがとうございます!何故これが今働いているのか不思議です(これはずっと前に試しました) – abhi

答えて

4

src/mainは、ソースファイルを配置するMavenの具体的なプロジェクト構造です。しかしビルド後、コンパイルされたクラスとリソースファイルはWEB-INF/classes/ディレクトリにコピーされます。あなたがmavenを使用していてresourcesフォルダがsource構造の一部である場合、XMLファイルはWEB-INF/classes/resourcesフォルダにコピーされますと仮定すると、

変更String hibernatePropsFilePath = "/resources/hibernate.cfg.xml";

Updateへのパス:あなたのWeb Deployment Assembly設定画像における第二を見てとった後

は、あなたのmain/resourcesフォルダがclassesディレクトリではないclasses/resourcesにマッピングされています。 Fileを使用せずに以下に示すコードを変更してください。あなたのcfg.xmlファイルが既にクラスパスの一部であるため、

Configuration configuration = new Configuration("hibernate.cfg.xml"); 
    configuration.addAnnotatedClass(ClientCrossRef.class);` 
    configuration.configure(); 

、さらにより良い事は、ある、あなたもそれを指定する必要はありません。 Hibernateはクラスパスでそれを探します。

ところで、あなたは

SessionFactory sessionFactory = new Configuration().configure(
        "hibernate.cfg.xml") 
        .buildSessionFactory(); 
+0

HTTPステータス500 - リクエスト処理に失敗しました。ネストされた例外はorg.hibernate.internal.utilです。config.ConfigurationException:指定されたcfg.xmlファイル[C:\ resources \ hibernate.cfg.xml]が存在しません。私はFileクラスのデフォルトのディレクトリがC:\ Users \ MYUSERNAME \ Desktopであることに気づいた。それも問題だろうか? – abhi

+1

@TheApprentice Webアプリケーションでは 'java.io.File'を使用しないでください。 Hibernateの 'Configure.configure()'メソッドはURLも受け入れます。適切なURLを取得するには、 'getClass()。getResource(" hibernate.cfg.xml ")'を呼び出すことができます。 – markbernard

+0

@markbernardとK139ありがとうございました。私は詳細な解答と解説の両方に感謝します。すでにこれについてメモを取っていて、アプリケーションは意図したとおりに動作しています。 – abhi

関連する問題