SchemaExport und SchemaUpdate die Möglichkeit, das Datenbank-Schema (Tabellen, Indizes, Fremdschlüssel-Constraints etc.) aus den Mapping-Informationen des Datenmodells zu generieren. Da es sich um Hibernate-spezifische API handelt, wird von den Klassen eine Hibernate-Configuration erwartet. Mit Hilfe der kleinen, von Hibernate nicht offiziell unterstützten (und mittlerweile auf "deprecated" gesetzten) Klasse Ejb3Configuration kann aber auch eine Java-Persistence-Konfigurationsdatei persistence.xml eingelesen werden:import org.hibernate.cfg.Configuration;
import org.hibernate.ejb.Ejb3Configuration;
import org.hibernate.tool.hbm2ddl.SchemaExport;
import org.hibernate.tool.hbm2ddl.SchemaUpdate;
...
Configuration cfg =
new Ejb3Configuration()
.configure("name-der-persistence-unit", null)
.getHibernateConfiguration();
Mit der ermittelten Configuration kann nun das komplette Schema ...
SchemaExport schemaExport = new SchemaExport(cfg);
schemaExport.setOutputFile("schema-komplett.sql");
schemaExport.create(true, false);
... oder aber nur die Differenz zum aktuell in der Datenbank vorhandenen Schema ermittelt werden:
SchemaUpdate schemaUpdate = new SchemaUpdate(cfg);
schemaUpdate.setOutputFile("schema-diff.sql");
schemaUpdate.execute(true, false);
Das
true beim jeweils letzten Aufruf sorgt dafür, dass das SQL-Skript in die angegebene Datei geschrieben wird. Das false verhindert, dass die SQL-Anweisungen in der Datenbank ausgeführt werden.Im kommenden Hibernate 4.3, das die JPA-2.1-Spezifikation implementiert, wird Ejb3Configuration nicht mehr enthalten sein. Dann muss bzw. kann endlich die mit JPA 2.1 standardisierte Schema-Generierung verwendet werden.
