2

Jetty 1.6 で実行されている GWT アプリで Hibernate 4.1 を使用しています。次のコードを取得して、hib.instance を起動します。

Configuration configuration = new Configuration().configure(ABS_PATH_TO_CONFIG+File.separator+"hibernate.cfg.xml");
ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();
sessionFactory = configuration.buildSessionFactory(serviceRegistry);

最初の行でエラーが発生します:

org.hibernate.HibernateException: ...hibernate.cfg.xml not found
at org.hibernate.internal.util.ConfigHelper.getResourceAsStream(ConfigHelper.java:173)

しかし、hibernate.cfg.xmlhib.config をロードする直前に可用性を確認しました。

File conf = new File(ABS_PATH_TO_CONFIG+File.separator+"hibernate.cfg.xml");
System.out.println(conf.canRead());

Sysout は true を返します。

ConfigHelper.getResourceAsStreamブレークポイントを含むのソースを調べる:

InputStream stream = null;
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
if (classLoader!=null) {
    stream = classLoader.getResourceAsStream( stripped );
}
if ( stream == null ) {
    stream = Environment.class.getResourceAsStream( resource );
}
if ( stream == null ) {
    stream = Environment.class.getClassLoader().getResourceAsStream( stripped );
}
if ( stream == null ) {
    throw new HibernateException( resource + " not found" );
}

私は何か間違ったことをしていますか (何かを理解していません)、それともここに xml ローダーがありませんか?

4

3 に答える 3

3

ここにはいくつかの間違いがあります。

まず第一に、これ:

Configuration configuration = new Configuration().configure(ABS_PATH_TO_CONFIG+File.separator+"hibernate.cfg.xml");

あなたが思っていることをしません。

あなたの例は、構成ファイルの可用性をチェックしていません。クラスパスではなく、ファイルシステムにファイルが存在するかどうかを確認しています。この違いは重要です。

Web アプリケーションをどのようにビルドしてデプロイするか、またはファイルをどのように整理するかについて詳しく知らなければ、「hibernate.cfg.xml」をクラスパスのルートにコピーしてみてください。それを configure() メソッドに渡します。それはうまくいくはずです。

したがって、コードは次のようになります。

Configuration configuration = new Configuration().configure("hibernate.cfg.xml");

また、hibernate.cfg.xml ファイルはクラスパスのルートにある必要があります。

または、Maven を使用している場合は、"resources" フォルダーの下に配置するだけで、Maven が残りの作業を行います。

于 2013-04-02T11:47:24.863 に答える
1

プログラムがあなたを治療することは決してないだろうとあなたに言います. 問題については、次のようにして構成ファイルのパスを取得できます。

String basePath = PropertiesUtil.class.getResource("/").getPath();

それからそれを読んでください

InputStream in = new FileInputStream(basePath + fileName);

幸運を!

于 2013-04-02T11:04:12.447 に答える
1

このようにして、カスタムに配置された構成ファイルがロードされます。

File conf = new File(ABS_PATH_TO_CONFIG+File.separator+"hibernate.cfg.xml");
Configuration configuration = new Configuration().configure(conf.getAbsoluteFile());

FYC:configure()メソッドがオーバーロードされています

于 2013-04-02T13:28:01.730 に答える