1

jpa アノテーション付きエンティティの ddl を作成する方法を探しています。これには純粋な Java の方法を好みます。

可能であれば、drop ステートメントも生成するとよいでしょう。

4

5 に答える 5

2

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>
于 2009-07-01T00:13:16.950 に答える
2

データベースからデータを 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(); を返します。
    }
}

于 2009-06-30T17:39:54.670 に答える
2

Hibernate には、これに対するサポートが組み込まれています。org.hibernate.tool.hbm2ddl.SchemaExportを参照してください。

于 2009-06-30T18:15:52.853 に答える
1

これは、休止状態の SchemaExport クラスを使用して、まさに必要なことを行う方法の説明です。

http://jandrewthompson.blogspot.com/2009/10/how-to-generate-ddl-scripts-from.html

お役に立てれば。

于 2009-10-28T14:44:14.067 に答える