データベースを新しいサーバーに移行した後、作業コピーがデータベースに接続できなくなりました。しかし、私は予期していなかった何かを経験しています。アプリケーションのページがこのデータベースに接続しようとすると、セッション ファクトリの構築中、つまり ISession による明示的な接続 (エンティティのロードなど) の前にエラーが発生します。
これは正しいですか?セッション ファクトリの構築にデータベースへの接続が必要なのはなぜですか?
データベースを新しいサーバーに移行した後、作業コピーがデータベースに接続できなくなりました。しかし、私は予期していなかった何かを経験しています。アプリケーションのページがこのデータベースに接続しようとすると、セッション ファクトリの構築中、つまり ISession による明示的な接続 (エンティティのロードなど) の前にエラーが発生します。
これは正しいですか?セッション ファクトリの構築にデータベースへの接続が必要なのはなぜですか?
セッション ファクトリの構築は、必ずしもデータベースに接続するとは限りません。データベースがまったくない場合に、セッション ファクトリをインスタンス化してマッピング ファイルから SQL ファイルを作成するアプリケーションを作成しました。
ただし、次のような構成を使用して、セッション ファクトリにデータベースを作成するようにアドバイスできます。
<property name="hbm2ddl.auto">create</property>
本番環境では行いませんが、単体テストには役立つかもしれません。このような構成については、プロジェクトを確認してください。
そのような構成がない場合は、有用な情報があるかどうかエラー メッセージを確認し、スタック トレースを調べて、それが発生した場所を確認します。
セッション ファクトリを構築すると、多くのクエリ、関係、メタデータなどがキャッシュされます。また、要求された場合は、データベースを作成/更新します。これは、 SessionFactoryImplクラスのコードを読んで得たものです。
セッション ファクトリを作成するプロセスは非常に重いため、DataSource ごとに 1 回だけ実行する必要があることに注意してください。これについて考えると、可能なすべてをキャッシュしてブートストラップすることは理にかなっています。
なぜそれが起こるのか、それが何をするのかを本当に知りたい場合は、ソースをダウンロードしてデバッグすることをお勧めします。