jpa アノテーション付きエンティティの ddl を作成する方法を探しています。これには純粋な Java の方法を好みます。
可能であれば、drop ステートメントも生成するとよいでしょう。
OpenJPA もこれをサポートしています。OpenJPAマッピング ツールは、スクリプトを作成したり、ddl ファイルを作成したりできます。ddl は他の JPA 実装で動作するはずです (ただし、各ベンダーにはいくつかの癖があります)。
OpenJPA を持続性プロバイダーとして使用している場合は、SynchronizeMappings プロパティーを persistence.xml に追加することで、テーブルが初めて必要になったときにテーブルを作成するように OpenJPA を構成できます。
例 :
<persistence-unit name="test">
<!--
. . .
-->
<properties>
<property name="openjpa.jdbc.SynchronizeMappings"
value="buildSchema"/>
</properties>
<!--
. . .
-->
</persistence-unit>
データベースからデータを SQL としてエクスポートする
liquibaseオープンソース プロジェクトを使用する
LiquiBase は、データベースの変更を追跡、管理、および適用するための、オープン ソース (LGPL) のデータベースに依存しないライブラリです。これは単純な前提に基づいて構築されています。すべてのデータベースの変更 (構造とデータ) は、XML ベースの記述的な方法で保存され、ソース管理にチェックインされます。
指定された JPA エンティティの作成およびドロップ スクリプトを生成する
このコードを使用して、drop ステートメントと create ステートメントを生成します。このクラスをすべてのエンティティ クラスで構築し、create/dropTableScript を呼び出すだけです。
必要に応じて、代わりに persitence.xml と永続ユニット名を使用できます。何かを言うだけで、コードも投稿します。
java.util.Collection をインポートします。 java.util.Properties をインポートします。 org.hibernate.cfg.AnnotationConfiguration をインポートします。 org.hibernate.dialect.Dialect をインポートします。 org.hibernate.ejb.Ejb3Configuration をインポートします。 /** * JPA/Hibernate アノテーションに基づくテーブルの SQL クリエーター。 * * 使用する: * * {@link #createTablesScript()} テーブル作成スクリプトを作成するには * * {@link #dropTablesScript()} テーブル破壊スクリプトを作成する * */ public class SqlTableCreator { プライベート最終 AnnotationConfiguration hibernateConfiguration; プライベート最終プロパティ dialectProps; public SqlTableCreator(最終コレクション>エンティティ) { final Ejb3Configuration ejb3Configuration = new Ejb3Configuration(); for (final Class entity : entities) { ejb3Configuration.addAnnotatedClass(エンティティ); } dialectProps = 新しいプロパティ(); dialectProps.put("hibernate.dialect", "org.hibernate.dialect.SQLServerDialect"); hibernateConfiguration = ejb3Configuration.getHibernateConfiguration(); } /** * すべてのテーブルを作成する SQL スクリプトを作成します。 * * @return SQL スクリプトを表す {@link 文字列}。 */ public String createTablesScript() { 最終 StringBuilder スクリプト = 新しい StringBuilder(); final String[] creationScript = hibernateConfiguration.generateSchemaCreationScript(方言) .getDialect(dialectProps)); for (最終文字列 string : creationScript) { script.append(string).append(";\n"); } script.append("\ngo\n\n"); script.toString(); を返します。 } /** * すべてのテーブルを削除する SQL スクリプトを作成します。 * * @return SQL スクリプトを表す {@link 文字列}。 */ public String dropTablesScript() { 最終 StringBuilder スクリプト = 新しい StringBuilder(); final String[] creationScript = hibernateConfiguration.generateDropSchemaScript(方言) .getDialect(dialectProps)); for (最終文字列 string : creationScript) { script.append(string).append(";\n"); } script.append("\ngo\n\n"); script.toString(); を返します。 } }
Hibernate には、これに対するサポートが組み込まれています。org.hibernate.tool.hbm2ddl.SchemaExportを参照してください。
これは、休止状態の SchemaExport クラスを使用して、まさに必要なことを行う方法の説明です。
http://jandrewthompson.blogspot.com/2009/10/how-to-generate-ddl-scripts-from.html
お役に立てれば。