これは重複していると思われますが、他の投稿の回答は役に立ちませんでした。私は、データベースの詳細がどこか他の場所に格納されているアプリケーションを開発しています。この標準の場所から読み取る必要があります。私はプログラムのルートにhibernate.propertiesとhibernate.cfg.xmlというファイルを持っていますが、プログラマティックに設定されている以下の設定もあります(値はハード・コーディングされています...):ファイルとコードの両方でHibernateの設定
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ファイルに格納されていることに注意してください。)私はそれを理解したよう
、設定()デフォルトのプロパティ/マッピングが右にロードされますか?私の "setProperty()"ステートメントは標準設定よりも優先されます。
ただし、すべての設定をhibernate.propertiesに入れても完全に動作します(つまり、hibernateがプロパティファイルを取得します)。コードにユーザー名とパスワードのみを入れると、「無効なユーザー/パス」で失敗します。これは、プログラムで設定したプロパティは常に無視されているかのようです。おそらく、両方の場所に詳細を置くと、設定ファイルの設定が使用されていると推測できます。
私が望むのは、プログラムで設定した設定は、プロパティファイル内のすべての設定を上書きする必要があります。
アイデア?
更新:両方の場所でユーザー/パスを追加しました。ファイルは「ファイルにセット」と呼ばれ、コードは「コードにセット」と呼ばれていました。次に、SessionFactoryを作成する直前にSystem.out.println()を追加しました。これを(部分的に)スニップしました。
java.runtime.name = Java(TM)SEランタイム環境、hibernate.connection。パスワード=設定コード、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、....
これは、コード内の設定が処理されることを意味します。