Blz galera, seguinte, estava apanhando com os plugins e tals para fazer engenharia reversa com o hibernate tools, então implementei tudo em java, sem nenhum XML (que beleza ) :mrgreen:
Então a classe que eu fiz gera os arquivos:
hbm.xml
hibernate.cfg.xml
.java
Você vai precisar dos sequintes jar:
ant.jar
asm.jar
cglib-2.1.3.jar
commons-collections-2.1.1.jar
commons-logging-1.0.4.jar
dom4j-1.6.1.jar
jtds-1.2.2.jar
hibernate3.jar
jtidy-r8-20060801.jar
freemarker.jar
hibernate-tools.jar
ejb3-persistence.jar
hibernate-annotations.jar
hibernate-commons-annotations.jar
jta.jar
segue o código, n tem erro, é só configurar com o banco de dados(senha, login, etc…), configurar o package para o caminho desejado.
segue o código
package com.reverse;
import java.io.File;
import java.io.FilenameFilter;
import org.hibernate.cfg.Configuration;
import org.hibernate.cfg.Environment;
import org.hibernate.cfg.JDBCMetaDataConfiguration;
import org.hibernate.cfg.reveng.DefaultReverseEngineeringStrategy;
import org.hibernate.cfg.reveng.OverrideRepository;
import org.hibernate.cfg.reveng.SchemaSelection;
import org.hibernate.cfg.reveng.TableFilter;
import org.hibernate.tool.hbm2x.ArtifactCollector;
import org.hibernate.tool.hbm2x.Exporter;
import org.hibernate.tool.hbm2x.HibernateConfigurationExporter;
import org.hibernate.tool.hbm2x.HibernateMappingExporter;
import org.hibernate.tool.hbm2x.POJOExporter;
/**
*
* @author Mauricio
*
*/
public class EngenhariaReversa {
private static final String DIRETORIO_DELETE = "src\\main\\java\\com\\sample\\VO";//diretorio para delete hbm.xml
private static final String METAINF = "src\\main\\java\\";//diretorio do hibernate.hbm.xml
private static final String DIRETORIO = "src\\main\\java";//diretorio dos hbm.xml
private static final String PACKAGE = "com.sample.VO";//adiciona nas classes POJO o package
//método que configura o jdbc que retorna um JDBCMetaDataConfiguration
private static JDBCMetaDataConfiguration configuration(){
//Configurando o JDBC
JDBCMetaDataConfiguration configuration = new JDBCMetaDataConfiguration();
try{
configuration.setProperty(Environment.DIALECT, "org.hibernate.dialect.SQLServerDialect");
configuration.setProperty(Environment.DRIVER, "net.sourceforge.jtds.jdbc.Driver");
configuration.setProperty(Environment.URL, "jdbc:jtds:sqlserver://10.42.11.255/SilarOperations");
configuration.setProperty(Environment.USER, "teste");
configuration.setProperty(Environment.PASS, "teste");
}catch (Exception e) {
e.printStackTrace();
}
return configuration;
}
//método que gera o código java (POJO)
public static void gerarJava(){
try{
ArtifactCollector artifactCollector = new ArtifactCollector();
File dest = new File(DIRETORIO);
Configuration cfg = new Configuration();
cfg.addDirectory(dest);
cfg.buildMappings();
Exporter exporter = new POJOExporter(cfg, dest);
exporter.getProperties().setProperty("ejb3", "true");
exporter.getProperties().setProperty("jdk5", "true");
exporter.setArtifactCollector(artifactCollector);
exporter.start();
//delete todos os arquivos com extensão hbm.xml
File directory = new File(DIRETORIO_DELETE);
FilenameFilter filter = new FilenameFilterImpl("hbm.xml");
File[] filteredFiles = directory.listFiles( filter );
for (int i = 0; i < filteredFiles.length; i++) {
filteredFiles[i].delete();
}
gerarCfgXml(artifactCollector, cfg);//gerando o arquivo hibernate.cfg.xml
}catch (Exception e) {
e.printStackTrace();
}
}
//Método que gera o arquivo hibernate.cfg.xml
private static void gerarCfgXml(ArtifactCollector artifactCollector, Configuration cfg){
try{
// configurando as properties
cfg.getProperties().setProperty(Environment.DIALECT, "org.hibernate.dialect.SQLServerDialect");
cfg.getProperties().setProperty(Environment.DRIVER, "net.sourceforge.jtds.jdbc.Driver");
cfg.getProperties().setProperty(Environment.URL, "jdbc:jtds:sqlserver://10.42.11.255/SilarOperations");
cfg.getProperties().setProperty(Environment.USER, "teste");
cfg.getProperties().setProperty(Environment.PASS, "teste");
File dest2 = new File(METAINF);
HibernateConfigurationExporter hb = new HibernateConfigurationExporter(cfg, dest2);
hb.setArtifactCollector(artifactCollector);
hb.getProperties().setProperty("ejb3", "true");
hb.getProperties().setProperty("jdk5", "true");
hb.start();
}catch (Exception e) {
e.printStackTrace();
}
}
//método que gera os arquivos hbm.xml
public static void gerarHbmXml() {
try{
JDBCMetaDataConfiguration configuration = configuration();
OverrideRepository or = new OverrideRepository();
SchemaSelection schema = new SchemaSelection("SilarOperations", ".*");
TableFilter filter = new TableFilter();
filter.setMatchSchema("dbo");
filter.setMatchCatalog("SilarOperations");
filter.setMatchName(".*");
filter.setExclude(false);
filter.setPackage(PACKAGE);
or.addTableFilter(filter);
or.addSchemaSelection(schema);
configuration.setReverseEngineeringStrategy(or.getReverseEngineeringStrategy(new DefaultReverseEngineeringStrategy()));
configuration.readFromJDBC();
configuration.buildMappings();
File dest = new File(DIRETORIO);
ArtifactCollector artifactCollector = new ArtifactCollector();
HibernateMappingExporter hbmExporter = new HibernateMappingExporter(configuration, dest);
hbmExporter.setArtifactCollector(artifactCollector);
hbmExporter.start();
}catch (Exception e) {
e.printStackTrace();
}
}
}
essa outra classe é somente se deseja deletar todos os arquivos hbm.xml gerados
package com.reverse;
import java.io.File;
import java.io.FilenameFilter;
public class FilenameFilterImpl implements FilenameFilter{
private String extensaoArquivo;
public FilenameFilterImpl(String extensao){
this.extensaoArquivo = "." + extensao;
}
public boolean accept(File dir, String name) {
if( name.endsWith(this.extensaoArquivo) ) return true;
return false;
}
}
Fácil não?
FLW