2010-05-17 10 views
5

Estoy tratando de configurar hbm2java con maven para generar clases POJO y objetos DAO. Uno de los problemas con los que estoy tratando es que los nombres de los paquetes no se generan. Estoy usando el siguiente pom para ello:Cómo configurar hbm2java y hbm2dao para agregar el nombre del paquete a las clases generadas

<execution> 
    <id>hbm2java</id> 
    <phase>generate-sources</phase> 
    <goals> 
     <goal>hbm2java</goal> 
    </goals> 
    <inherited>false</inherited> 
    <configuration> 
     <components> 
      <component> 
       <name>hbm2java</name> 
       <implementation>configuration</implementation> 
      </component> 
     </components> 
     <componentProperties> 
      <packagename>package.name</packagename> 
      <configurationfile>target/hibernate3/generated-mappings/hibernate.cfg.xml</configurationfile> 
     </componentProperties> 
    </configuration> 
</execution> 

Sin embargo, el código generado comienza con lo siguiente:

// default package 
// Generated 2010-05-17 13:11:51 by Hibernate Tools 3.2.2.GA 

/** 
* Messages generated by hbm2java 
*/ 
public class Messages implements java.io.Serializable { 

¿Hay una manera de forzar experto para generar el paquete parte como se define en nombre del paquete?

Actualización:

Aquí está mi hibernate.cfg.xml, también se genera automáticamente por Hibernate herramienta (hbm2cfgxml):

<?xml version="1.0" encoding="utf-8"?> 
<!DOCTYPE hibernate-configuration PUBLIC 
"-//Hibernate/Hibernate Configuration DTD 3.0//EN" 
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> 
<hibernate-configuration> 
    <session-factory> 
     <property name="hibernate.c3p0.max_size">20</property> 
     <property name="hibernate.c3p0.max_statements">50</property> 
     <property name="hibernate.c3p0.min_size">5</property> 
     <property name="hibernate.c3p0.timeout">1800</property> 
     <property name="hibernate.connection.driver_class">org.postgresql.Driver</property> 
     <property name="hibernate.connection.password">password</property> 
     <property name="hibernate.connection.url">jdbc:postgresql://localhost:5432/db</property> 
     <property name="hibernate.connection.username">username</property> 
     <property name="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</property> 
     <mapping resource="package/name/Messages.hbm.xml" /> 
    </session-factory> 
</hibernate-configuration> 
+0

¿Cómo se ve su archivo hibernate.cfg.xml similares. ¿Es posible que el archivo esté anulando la configuración? Además, tenga en cuenta que el archivo de configuración que ha especificado está mal escrito, hibernane.cfg.xml. No estoy seguro si eso es intencional o no. – tschaible

+0

El error ortográfico surgió al copiar y pegar y formatear el código de StackOverflow, pero gracias. Agregué mi hibernate.cfg.xml. – mmm

Respuesta

3

Por si acaso, aquí es una configuración de trabajo de la Hibernate3-maven-plug-in para un enfoque de abajo hacia arriba:

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>hibernate3-maven-plugin</artifactId> 
    <version>2.2</version> 
    <executions> 
     <execution> 
     <id>generate-xml-files</id> 
     <phase>generate-resources</phase> 
     <goals> 
      <goal>hbm2hbmxml</goal> 
      <goal>hbm2cfgxml</goal> 
     </goals> 
     </execution> 
     <execution> 
     <id>generate-entities</id> 
     <phase>generate-sources</phase> 
     <goals> 
      <goal>hbm2java</goal> 
     </goals> 
     </execution> 
    </executions> 
    <configuration> 
     <components> 
     <component> 
      <name>hbm2hbmxml</name> 
      <implementation>jdbcconfiguration</implementation> 
      <outputDirectory>target/classes</outputDirectory> 
     </component> 
     <component> 
      <name>hbm2cfgxml</name> 
      <implementation>jdbcconfiguration</implementation> 
      <outputDirectory>target/classes</outputDirectory> 
     </component> 
     <component> 
      <name>hbm2java</name> 
      <implementation>configuration</implementation> 
      <outputDirectory>target/generated-sources/hibernate3</outputDirectory> 
     </component> 
     </components> 
     <componentProperties> 
     <propertyfile>src/main/resources/database.properties</propertyfile> 
     <jdk5>true</jdk5> 
     <ejb3>false</ejb3> 
     <packagename>com.mycompany.myapp</packagename> 
     <format>true</format> 
     <haltonerror>true</haltonerror> 
     </componentProperties> 
    </configuration> 
    <dependencies> 
     <dependency> 
     <groupId>org.apache.derby</groupId> 
     <artifactId>derby</artifactId> 
     <version>10.5.3.0_1</version> 
     </dependency> 
    </dependencies> 
    </plugin> 

Y aquí es el contenido de mi archivo src/main/database.properties:

hibernate.connection.driver_class=org.apache.derby.jdbc.EmbeddedDriver 
hibernate.connection.url=jdbc:derby:./derbyDBs/EMPLDB 
hibernate.connection.username=APP 
hibernate.connection.password=APP 
hibernate.dialect=org.hibernate.dialect.DerbyDialect 

#workaround for http://opensource.atlassian.com/projects/hibernate/browse/HBX-1145 
hibernate.connection.autocommit=true 

Esta configuración:

  1. Genera *.hbm.xml en target/classes (con el paquete) durante generate-resources.
  2. Genera hibernate.cfg.xml en target/classes con entradas para los archivos de asignación.
  3. Genera entidades a partir de las asignaciones en target/generated-sources/hibernate3 (recomiendo seguir la convención target/generated-sources/<tool> para las fuentes generadas, de modo que sean autodetectadas por los IDE).

Aquí es un resultado de clean compile contra una base de datos de muestra con dos tablas:

 
$ mvn clean compile 
... 
$ tree target/ 
target/ 
├── classes 
│   ├── com 
│   │   └── mycompany 
│   │    └── myapp 
│   │     ├── Department.class 
│   │     ├── Department.hbm.xml 
│   │     ├── Employee.class 
│   │     └── Employee.hbm.xml 
│   ├── database.properties 
│   └── hibernate.cfg.xml 
└── generated-sources 
    └── hibernate3 
     └── com 
      └── mycompany 
       └── myapp 
        ├── Department.java 
        └── Employee.java 
+0

Agradable, más simple que el mío :). ¿Tiene alguna pista de por qué los archivos hbm.xml no se copian automáticamente a target/classes desde generated-sources/hibernate3/generated-mappings antes de que se ejecute el objetivo generate-sources? Veo que también fuerza a maven a poner esos archivos directamente en la carpeta de destino/clases. ¿No hay una manera de configurar eso de alguna manera? – mmm

+0

@mmm No sé por qué no lo están (el complemento debe * agregar * este directorio como directorio de recursos al pom). Debería ser posible utilizar el complemento Build Helper (consulte la página [Uso] (http://mojo.codehaus.org/build-helper-maven-plugin/usage.html) para eso. Pero esto sería más detallado y no veo beneficios reales. Entonces, como la solución que estoy usando solo funciona, nunca intenté hacerlo de otra manera. –

0

Ok, lo he descubierto. Puse la respuesta here.

Cuestiones relacionadas