Comment configurer hbm2java et hbm2dao ajouter packagename aux classes générées
-
27-09-2019 - |
Question
Je suis en train de configurer hbm2java
avec Maven pour générer des classes POJO et objets DAO. L'une des questions que je traite est noms de paquets ne sont pas générés. J'utilise la pom suivante pour que:
<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>
Pourtant, le code généré commence par ce qui suit:
// 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 {
Y at-il un moyen de forcer Maven pour générer le package partie tel que défini dans packagename
Mise à jour:
Voici mon hibernate.cfg.xml, également généré automatiquement par mise en veille prolongée outils (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>
La solution
Juste au cas où, voici une configuration de travail du hibernate3-maven-plugin pour une approche ascendante:
<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>
Et voici le contenu de mon fichier 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
Cette configuration:
- Génère
*.hbm.xml
entarget/classes
(avec l'emballage) pendantgenerate-resources
. - Génère un
hibernate.cfg.xml
entarget/classes
avec des entrées pour les fichiers de mappage. - Génère entités des applications dans
target/generated-sources/hibernate3
(je recommande la suite de la convention detarget/generated-sources/<tool>
des sources déterminée afin de s'obtenir détectés automatiquement par IDEs).
Voici un résultat de clean compile
contre une base de données exemple avec deux tableaux:
$ 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
Autres conseils
Ok, je compris. Je mets la réponse ici .