我将Hibernate更新为4.1.1.Final版本。根据{{3}} 有两种方法可以生成数据库模式:
org.hibernate.tool.ant.EnversHibernateToolTask
。org.hibernate.tool.EnversSchemaGenerator
。Hibernate-tools不适用于Hibernate-4.1.1.Final。它有一个the documentation。
我发现只有blocking bug和release notes。
那么如何将org.hibernate.tool.EnversSchemaGenerator
与persistence.xml和Maven一起使用?
更新
找到相关的test case。似乎我的问题没有答案。
答案 0 :(得分:9)
Juplo创建了Maven plugin for Hibernate 4。该插件支持包括Envers的模式导出。工作示例如下。检查official plugin configuration documentation以获取已使用选项的说明。
该插件会在schema.sql
目标上的Maven /target
目录中生成test
个文件。
或者,您可以手动运行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>
答案 1 :(得分: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。
答案 2 :(得分: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);
}
答案 3 :(得分:0)
我遇到了同样的问题。现在有一个Hibernate 4 Tools版本:
<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);
}
你还有兴趣吗?如果我知道如何解决问题,我会通知你。也许其他人对我们有任何建议?