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.