7

これが重複しているように思われる場合は申し訳ありませんが、他の投稿の回答は役に立ちませんでした. データベースの詳細が別の場所に保存されているアプリケーションを開発しており、この標準の場所から読み取る必要があります。プログラムのルートにファイル hibernate.properties と hibernate.cfg.xml があり、プログラムで設定された次の構成もあります (動作するまで値はハードコードされています...):

Configuration configuration = new Configuration().configure();

configuration.setProperty("hibernate.connection.driver_class", "oracle.jdbc.pOracleDriver");
configuration.setProperty("hibernate.connection.url", "jdbc:oracle:thin:@dte_datalayer:1521:DTE");
configuration.setProperty("hibernate.connection.username", "testuser");
configuration.setProperty("hibernate.connection.password", "testpass");

SessionFactory sessionFactory = configuration.buildSessionFactory(new ServiceRegistryBuilder().buildServiceRegistry());

(ダイアレクトなどのその他の設定は hibernate.properties ファイルに保存されることに注意してください。)

私が理解しているように、configure() はデフォルトのプロパティ/マッピングを正しくロードしますか? 私の「setProperty()」ステートメントは、標準設定をオーバーライドしますよね?

ただし、私が得た動作は次のとおりです。 すべての構成を hibernate.properties に入れると、完全に機能します (つまり、hibernate がプロパティ ファイルを取得します)。ユーザー名とパスワードのみをコードに入れると、「無効なユーザー/パス」で失敗します。プログラムで設定したプロパティが常に無視されるかのようです。両方の場所に詳細を配置すると、構成ファイルの設定が使用されることがおそらく推測できます。

私が望むのは、プログラムで設定した設定は、プロパティ ファイルの設定をオーバーライドする必要があるということです。

何か案は?


更新:両方の場所にユーザー/パスを追加しました。ファイルは「set-in-file」と呼ばれ、コードは「set-in-code」と呼ばれていました。次に、SessionFactory を作成する直前に System.out.println() を追加しました...これを取得しました (部分的な切り取り):

java.runtime.name=Java(TM) SE ランタイム環境、hibernate.connection.password=set-in-code、hibernate.cache.provider_class=org.hibernate.cache.NoCacheProvider、sun.boot.library.path=/usr /lib/jvm/java-6-sun-1.6.0.26/jre/lib/amd64、java.vm.version=20.1-b02、hibernate.connection.username=testuser、....

これは、コード内の設定が処理されることを意味します...ただし、何らかの理由で無視されます...

4

1 に答える 1

9

わかりました.. Hibernate の古いバージョンと新しいバージョンの間で混乱していました...問題は最後の行にあります。

コードを次のように置き換えました。

Configuration configuration = new Configuration();
configuration.configure();

configuration.setProperty("hibernate.connection.username", "whomever");
configuration.setProperty("hibernate.connection.password", "whatever");

ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();        
SessionFactory sessionFactory = configuration.buildSessionFactory(serviceRegistry);
...

...そしてそれは機能します。

于 2012-05-17T09:27:45.563 に答える