I find it useful when using the params "generate-concrete-empty-classes" and "baseclass-prefix" in the config.xml to hbm2java to not overwrite the generated concrete class once it exists because that is where I am writing my accessor methods. I added the following code to Generator.java. Please add it to CVS if this would be helpful to others.
private void write(ClassMapping classMapping, Map class2classmap, Renderer renderer) throws Exception {
String saveToPackage = renderer.getSaveToPackage(classMapping);
String saveToClassName = renderer.getSaveToClassName(classMapping);
File dir = this.getDir(saveToPackage);
File file = new File(dir, this.getFileName(saveToClassName));
// Return if file exists and we do not want to overwrite it
if( doNotOverwrite( params, file ) ) {
return;
}
log.debug("Writing " + file);
PrintWriter writer = new PrintWriter(new FileOutputStream(file));
renderer.render(getPackageName(saveToPackage), getName(saveToClassName), classMapping, class2classmap, writer);
writer.close();
}
/**
* Do not overwrite a previously generated file if param is set
*/
private boolean doNotOverwrite( Properties params, File file ) {
File outFile = null;
String val = params.getProperty(");
boolean isSet = Boolean.valueOf(val).booleanValue();
if( isSet ) {
return file.exists();
}
return false;
}
Example config.xml to pass hbm2java:
<codegen>
<generate prefix="Base" renderer="net.sf.hibernate.tool.hbm2java.BasicRenderer"/>
<generate renderer="net.sf.hibernate.tool.hbm2java.BasicRenderer">
<param name="generate-concrete-empty-classes">true</param>
<param name="baseclass-prefix">Base</param>
<param name="do-not-overwrite">true</param>
</generate>
</codegen>
Thank you,
Anthony Schexnaildre
DuoCash Inc.