hibernate 如何使用EnversSchemaGenerator生成Envers数据库模式?

8nuwlpux  于 2022-11-30  发布在  其他
关注(0)|答案(4)|浏览(130)

我把Hibernate更新到了4.1.1.Final版本。根据文档,有两种方法可以生成数据库模式:
1.蚂蚁任务org.hibernate.tool.ant.EnversHibernateToolTask
1.从Java运行org.hibernate.tool.EnversSchemaGenerator
Hibernate工具无法与Hibernate-4.1.1.Final一起使用。它有一个blocking bug
我只找到了release notes和一个test case。那么,如何将org.hibernate.tool.EnversSchemaGenerator与persistence.xml和Maven一起使用呢?

更新日期:

找到了相关的thread on the Hibernate forum。似乎还没有答案。

ntjbwcob

ntjbwcob1#

Juplo已经创建了Maven plugin for Hibernate 4。该插件支持包括Envers的模式导出。工作示例如下。检查official plugin configuration documentation以获得所用选项的解释。
该插件在test目标上的Maven /target目录中生成schema.sql文件。或者您可以手动运行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>
lpwwtiir

lpwwtiir2#

您不需要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 EnversSchemaGenerator(config).export();
export.execute(true, false, false, false);

您也可以给予它一个文件名来写入,但是上面的代码还是会打印到syslog。

50pmv0ei

50pmv0ei3#

以下内容对我很有效:

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);
}
zsohkypk

zsohkypk4#

我也遇到了同样的问题。现在有一个Hibernate 4工具版本:

<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);
}

你还感兴趣吗?如果我找到了解决这个问题的方法,我会告诉你的。也许别人有什么建议给我们?

相关问题