Wie erstelle ich ein Envers-Datenbankschema mit org.hibernate.tool.EnversSchemaGenerator?
-
10-12-2019 - |
Frage
Ich habe Hibernate auf die 4.1.1.Final-Version aktualisiert.Entsprechend die Dokumentation Es gibt zwei Möglichkeiten, ein Datenbankschema zu generieren:
- Ameisenaufgabe
org.hibernate.tool.ant.EnversHibernateToolTask
. - Laufen
org.hibernate.tool.EnversSchemaGenerator
aus Java.
Hibernate-tools funktioniert nicht mit Hibernate-4.1.1.Final.Es hat ein Blockierender Fehler.
Ich habe nur gefunden Versionshinweise und ein Testfall.Wie kann ich also verwenden org.hibernate.tool.EnversSchemaGenerator
mit meiner persistence.xml und Maven?
Aktualisieren:
Verwandte gefunden Thread im Hibernate-Forum.Es scheint, dass es noch keine Antwort auf meine Frage gibt.
Lösung
Juplo hat erstellt Maven-Plugin für Hibernate 4.Das Plugin unterstützt den Schema-Export einschließlich Envers.Das Arbeitsbeispiel finden Sie unten.Überprüfen Offizielle Dokumentation zur Plugin-Konfiguration um Erklärungen zu den verwendeten Optionen zu erhalten.
Das Plugin generiert schema.sql
Datei im Maven /target
Verzeichnis auf test
Ziel.Oder Sie können es manuell ausführen hibernate4:export
Ziel ist es, die Datei zu aktualisieren.
<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>
Andere Tipps
Sie benötigen keine Ant- oder Hibernate-Tools.Es ist ziemlich einfach, den EnversSchemaGenerator direkt zu verwenden, etwa so:
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);
Sie können ihm auch einen Dateinamen zum Schreiben geben, aber der obige Code wird trotzdem im Syslog ausgegeben.
Folgendes hat bei mir funktioniert:
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);
}
Ich habe das gleiche Problem.Jetzt gibt es eine Hibernate 4 Tools-Version:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-tools</artifactId>
<version>4.0.0-CR1</version>
</dependency>
Dieses Ant-Fragment exportiert jedoch nicht die Audit-Tabellen, sondern nur die „Basis“-Tabellen:
<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>
Das Gleiche gilt für diesen Code:Nur „Basic“, keine „_aud“-Tabellen:
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);
}
Haben sie noch Interesse?Ich gebe Ihnen Bescheid, wenn ich herausgefunden habe, wie ich das Problem lösen kann.Vielleicht hat noch jemand einen Rat für uns?