ファイル import.sql を一度だけインポートする方法を知っている人はいますか?
基本的に、私は複数のエンティティマネージャーを持っています。entitymanager が作成されるたびに、import.sql から sql をインポートしようとします (hibernate docs にも記載されています)。ただし、EM が 2 回目に作成されると例外が発生します。
インポート ファイルが既に使用されているかどうかを実行時に確認する方法はありませんか?
わかりました、これが最善の方法かどうかはわかりませんが、簡単な解決策です。以下のように Entitymanager を作成する場合、最初の EntityManager が作成されたら、プロパティ「hibernate.hbm2ddl.auto」を削除するだけです。
EntityManagerFactory emf = Persistence.createEntityManagerFactory(
"bla", props);
EntityManager em = emf.createEntityManager();
props.remove("hibernate.hbm2ddl.auto"); // <-- important
EntityManagerFactory emf2 = Persistence.createEntityManagerFactory(
"bla2", props);
EntityManager em2 = emf2.createEntityManager();
その上、import.sql が「DROP TABLE IF EXISTS」のような用語を許可していることを見てきました。Oracleでの作業に慣れていたため、最初はそれを見逃していましたが、これにより「ユーザーに権限がないか、オブジェクトが見つかりません:SOME_TABLE」などのエラーが発生しました
私は試していませんが、org.hibernate.tool.hbm2ddl.SchemaExport
アプリケーションの起動時に手動でスキーマをデータベースにエクスポートできます。
ドキュメントから :テーブル スキーマをデータベースにエクスポートするためのコマンドライン ツール。このクラスは、アプリケーション内から呼び出すこともできます。
SchemaExport export = new SchemaExport(config);
export.setInputFile("import.sql");
export.create(false, true);