6

Hibernateを4.1.1.Finalバージョンに更新しました。ドキュメントによると 、データベーススキーマを生成する方法は2つあります。

  1. Antタスクorg.hibernate.tool.ant.EnversHibernateToolTask
  2. Javaから実行org.hibernate.tool.EnversSchemaGeneratorします。

Hibernate-toolsはHibernate-4.1.1.Finalでは機能しません。ブロッキングバグがあります。

リリースノートテストケースしか見つかりませんでした。org.hibernate.tool.EnversSchemaGeneratorでは、persistence.xmlとMavenでどのように使用できますか?

アップデート:

Hibernateフォーラムで関連スレッドが見つかりました。私の質問に対する答えはまだないようです。

4

4 に答える 4

12

Juploは、Hibernate4用のMavenプラグインを作成しました。プラグインは、Enversを含むスキーマエクスポートをサポートします。実例を以下に示します。使用されているオプションの説明については、公式のプラグイン構成ドキュメントを確認してください。

プラグインは、ゴールschema.sqlでMaven/targetディレクトリにファイルを生成します。testまたは、goalを手動で実行hibernate4:exportしてファイルを更新することもできます。

<project>
    <build>
        <plugins>
            <plugin>
                <groupId>de.juplo</groupId>
                <artifactId>hibernate4-maven-plugin</artifactId>
                <version>1.0.3</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>export</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <envers>true</envers>
                    <format>true</format>
                    <delimiter>;</delimiter>
                    <force>true</force>
                    <type>CREATE</type>
                    <target>SCRIPT</target>
                    <hibernateDialect>org.hibernate.dialect.PostgreSQL9Dialect</hibernateDialect>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>
于 2014-02-16T05:38:35.937 に答える
4

AntまたはHibernateツールは必要ありません。次のように、EnversSchemaGeneratorを直接使用するのは非常に簡単です。

Configuration config = new Configuration();

//make sure you set the dialect correctly for your database (oracle for example below)
config.setProperty("hibernate.dialect","org.hibernate.dialect.Oracle10gDialect");

//add all of your entities
config.addAnnotatedClass(MyAnnotatedEntity.class);

SchemaExport export = new EnversSchemaGeneHator(config).export();
export.execute(true, false, false, false);

書き込むファイル名を付けることもできますが、上記のコードはとにかくsyslogに出力されます。

于 2013-07-24T20:41:30.000 に答える
2

以下は私のために働いた:

public static void main(String[] args) {
    Ejb3Configuration jpaConfiguration = new Ejb3Configuration().configure("persistenceUnit", null);
    jpaConfiguration.buildMappings();
    Configuration hibernateConfiguration = jpaConfiguration.getHibernateConfiguration();
    AuditConfiguration.getFor(hibernateConfiguration);
    EnversSchemaGenerator esg = new EnversSchemaGenerator(hibernateConfiguration);
    org.hibernate.tool.hbm2ddl.SchemaExport se = esg.export();
    se.setOutputFile("sql/schema.sql");
    se.setFormat(true);
    se.setDelimiter(";");
    se.drop(true, false);
    se.create(true, false);
}
于 2013-07-13T18:44:31.673 に答える
0

私も同じ問題を抱えています。現在、Hibernate4Toolsバージョンがあります。

    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-tools</artifactId>
        <version>4.0.0-CR1</version>
    </dependency>

ただし、このAntフラグメントは監査テーブルをエクスポートせず、「基本」テーブルのみをエクスポートします。

<target name="schema-export">
    <taskdef name="hibernatetool" classname="org.hibernate.tool.ant.EnversHibernateToolTask" classpathref="classpath"/>
    <hibernatetool destdir="sql">
        <classpath refid="classpath"/>
        <jpaconfiguration persistenceunit="persistenceUnit"/>
        <hbm2ddl export="false" create="true" drop="true" format="true" outputfilename="schema.sql"/>
    </hibernatetool>
</target>

このコードと同じ:「基本」のみ、「_aud」テーブルはありません:

public static void main(String[] args) {
    Ejb3Configuration jpaConfiguration = new Ejb3Configuration().configure("persistenceUnit", null);
    Configuration hibernateConfiguration = jpaConfiguration.getHibernateConfiguration();
    AuditConfiguration.getFor(hibernateConfiguration);
    EnversSchemaGenerator esg = new EnversSchemaGenerator(hibernateConfiguration);
    org.hibernate.tool.hbm2ddl.SchemaExport se = esg.export();
    se.setOutputFile("sql/schema.sql");
    se.setFormat(true);
    se.setDelimiter(";");
    se.drop(true, false);
    se.create(true, false);
}

まだ興味をお持ちですか?問題の解決方法がわかればお知らせします。多分誰か他の人が私たちに何かアドバイスをくれましたか?

于 2013-03-31T10:26:40.003 に答える