package org.artificer.repository.hibernate.tool;
import org.artificer.common.ontology.ArtificerOntology;
import org.artificer.common.ontology.ArtificerOntologyClass;
import org.artificer.repository.hibernate.audit.ArtificerAuditEntry;
import org.artificer.repository.hibernate.audit.ArtificerAuditItem;
import org.artificer.repository.hibernate.entity.ArtificerArtifact;
import org.artificer.repository.hibernate.entity.ArtificerComment;
import org.artificer.repository.hibernate.entity.ArtificerDocumentArtifact;
import org.artificer.repository.hibernate.entity.ArtificerProperty;
import org.artificer.repository.hibernate.entity.ArtificerRelationship;
import org.artificer.repository.hibernate.entity.ArtificerStoredQuery;
import org.artificer.repository.hibernate.entity.ArtificerTarget;
import org.artificer.repository.hibernate.entity.ArtificerWsdlDerivedArtifact;
import org.artificer.repository.hibernate.entity.ArtificerWsdlDocumentArtifact;
import org.artificer.repository.hibernate.entity.ArtificerXsdDocumentArtifact;
import org.hibernate.cfg.Configuration;
import org.hibernate.tool.hbm2ddl.SchemaExport;
/**
* This uses the Hibernate Schema Exporter to generate initial DDL using Artificer entities. However, this should only
* be used for testing or to initially seed the DDL. For production use, DDL should be optimized by hand, then used
* in a Liquibase maintenance strategy.
*
* @author Brett Meyer
*/
public class ArtificerSchemaExporter {
public static void main(String[] args) {
export("org.hibernate.dialect.H2Dialect", "h2.sql");
export("org.hibernate.dialect.MySQL5Dialect", "mysql5.sql");
export("org.hibernate.dialect.PostgreSQL82Dialect", "postgres9.sql");
export("org.hibernate.dialect.Oracle10gDialect", "oracle10.sql");
export("org.hibernate.dialect.SQLServer2012Dialect", "mssql2012.sql");
export("org.hibernate.dialect.DB2Dialect", "db2.sql");
}
private static void export(String dialect, String filename) {
Configuration cfg = new Configuration();
cfg.addAnnotatedClass(ArtificerArtifact.class);
cfg.addAnnotatedClass(ArtificerComment.class);
cfg.addAnnotatedClass(ArtificerDocumentArtifact.class);
cfg.addAnnotatedClass(ArtificerProperty.class);
cfg.addAnnotatedClass(ArtificerRelationship.class);
cfg.addAnnotatedClass(ArtificerStoredQuery.class);
cfg.addAnnotatedClass(ArtificerTarget.class);
cfg.addAnnotatedClass(ArtificerWsdlDerivedArtifact.class);
cfg.addAnnotatedClass(ArtificerWsdlDocumentArtifact.class);
cfg.addAnnotatedClass(ArtificerXsdDocumentArtifact.class);
cfg.addAnnotatedClass(ArtificerAuditEntry.class);
cfg.addAnnotatedClass(ArtificerAuditItem.class);
cfg.addAnnotatedClass(ArtificerOntology.class);
cfg.addAnnotatedClass(ArtificerOntologyClass.class);
cfg.setProperty("hibernate.dialect", dialect);
SchemaExport schemaExport = new SchemaExport(cfg);
schemaExport.setDelimiter(";");
schemaExport.setOutputFile("repository/hibernate/src/main/resources/ddl/" + filename);
schemaExport.execute(true, false, false, true);
}
}