-
v1.5.0
Original java code is taken from How To Generate DDL Scripts from Hibernate and modified a little bit to take all classes which hava annotation @Table in provided package and all sub-packages. This way of generating ddl files is better because you may provide only parent package name and all sub packages will be processed in order to get all dependencies between entities.
What you need is hibernate-core-*.jar, hibernate-annotations-*.jar and xaloon-wicket-components-1.2-SNAPSHOT.jar dependency
So we replace code:
/**
* Utility method used to fetch Class list based on a package name.
*
* @param packageName
* (should be the package containing your annotated beans.
*/
private List<Class<?>> getClasses(String packageName) throws Exception {
...
}
with short one:
/**
* Utility method used to fetch Class list based on a package name.
*
* @param packageName
* (should be the package containing your annotated beans.
*/
private List<Class<?>> getClasses(String packageName) throws Exception {
PageAnnotatedScanner pas = new PageAnnotatedScanner();
return pas.scanPackage(packageName, Table.class);
}
... and we will get get generated code with all required dependencies. Well, in case we provide parent package name :)
So whole class would be something like this:
import java.util.List;
import javax.persistence.Table;
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.tool.hbm2ddl.SchemaExport;
import org.xaloon.wicket.component.mounting.PageAnnotatedScanner;
/**
* original code taken from
* http://jandrewthompson.blogspot.com/2009/10/how-to-generate-ddl-scripts-from.html
* and modified by
* @author vytautas racelis
*
*/
public class SchemaGenerator {
private AnnotationConfiguration cfg;
public SchemaGenerator(String packageName) throws Exception {
cfg = new AnnotationConfiguration();
cfg.setProperty("hibernate.hbm2ddl.auto", "create");
for (Class<?> clazz : getClasses(packageName)) {
cfg.addAnnotatedClass(clazz);
}
}
/**
* Method that actually creates the file.
*
* @param dbDialect
* to use
*/
private void generate(Dialect dialect) {
cfg.setProperty("hibernate.dialect", dialect.getDialectClass());
SchemaExport export = new SchemaExport(cfg);
export.setDelimiter(";");
export.setOutputFile("ddl_" + dialect.name().toLowerCase() + ".sql");
export.execute(true, false, false, false);
}
/**
* @param args
*/
public static void main(String[] args) throws Exception {
SchemaGenerator gen = new SchemaGenerator("org.xaloon.wicket.component");
gen.generate(Dialect.POSTGRE);
}
/**
* Utility method used to fetch Class list based on a package name.
*
* @param packageName
* (should be the package containing your annotated beans.
*/
private List<Class<?>> getClasses(String packageName) throws Exception {
PageAnnotatedScanner pas = new PageAnnotatedScanner();
return pas.scanPackage(packageName, Table.class);
}
/**
* Holds the classnames of hibernate dialects for easy reference.
*/
private static enum Dialect {
POSTGRE("org.hibernate.dialect.PostgreSQLDialect");
private String dialectClass;
private Dialect(String dialectClass) {
this.dialectClass = dialectClass;
}
public String getDialectClass() {
return dialectClass;
}
}
}
Happy coding :)
xaloon.org provides apache wicket based components for web and business solutions.
Learn more »
Hi vytautas, glad to see someone finding some use for that code I wrote a while back. Cheers! -- andrew