これが重複しているように思われる場合は申し訳ありませんが、他の投稿の回答は役に立ちませんでした. データベースの詳細が別の場所に保存されているアプリケーションを開発しており、この標準の場所から読み取る必要があります。プログラムのルートにファイル 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、....
これは、コード内の設定が処理されることを意味します...ただし、何らかの理由で無視されます...