Come configurare Hibernate-tools con Maven per generare hibernate.cfg.xml, * .hbm.xml, POJO e DAO

StackOverflow https://stackoverflow.com/questions/2843949

Domanda

uno può dirmi come forzare Maven precedere mappatura .hbm.xml file nel file hibernate.cfg.xml generato automaticamente con il percorso del pacchetto?

La mia idea generale è, mi piacerebbe usare Hibernate-tools via Maven per generare lo strato di persistenza per la mia applicazione. Così, ho bisogno del hibernate.cfg.xml, allora tutti my_table_names.hbm.xml e alla fine del POJO del generato. Tuttavia, l'obiettivo hbm2java non funzionerà come ho messo file * .hbm.xml nella cartella src/main/resources/package/path/ ma hbm2cfgxml specifica i file di mapping solo dal nome della tabella, cioè:.

<mapping resource="MyTableName.hbm.xml" />

Quindi, la grande domanda è: come posso configurare hbm2cfgxml in modo che assomiglia hibernate.cfg.xml come di seguito:

<mapping resource="package/path/MyTableName.hbm.xml" />

I miei sguardi pom.xml come questo in questo momento:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>hibernate3-maven-plugin</artifactId>
    <version>2.2</version>
    <executions>
        <execution>
            <id>hbm2cfgxml</id>
            <phase>generate-sources</phase>
            <goals>
                <goal>hbm2cfgxml</goal>
            </goals>
            <inherited>false</inherited>
            <configuration>
                <components>
                    <component>
                        <name>hbm2cfgxml</name>
                        <implemetation>jdbcconfiguration</implementation>
                        <outputDirectory>src/main/resources/</outputDirectory>
                    </component>
                </components>
                <componentProperties>
                    <packagename>package.path</packageName>
                    <configurationFile>src/main/resources/hibernate.cfg.xml</configurationFile>
                </componentProperties>
            </configuration>
        </execution>
    </executions>
</plugin>

E poi la seconda domanda: esiste un modo per dire Maven per copiare le risorse nella cartella di destinazione prima di eseguire hbm2java? Al momento sto usando

mvn clean resources:resources generate-sources

per questo, ma ci deve essere un modo migliore.

Grazie per qualsiasi aiuto.

Aggiornamento:

@Pascal: Grazie per il vostro aiuto. Il percorso per le mappature funziona bene ora, non so che cosa era sbagliato prima, però. Forse c'è qualche problema con la scrittura hibernate.cfg.xml durante la lettura di configurazione del database da esso (anche se il file viene aggiornato).

Ho cancellato il file hibernate.cfg.xml, lo ha sostituito con database.properties ed eseguire il hbm2cfgxml obiettivi e hbm2hbmxml. Anche io non uso il outputDirectoryconfigurationfile in quegli obiettivi più.

Di conseguenza i file hibernate.cfg.xml e tutti *.hbm.xml vengono generati nel mio target / / generate-mapping / cartella Hibernate3, che è il valore di default. Poi ho aggiornato il gol hbm2java con la seguente:

<componentProperties>
    <packagename>package.name</packagename>
    <configurationfile>target/hibernate3/generated-mappings/hibernate.cfg.xml</configurationfile>
</componentProperties>

Ma poi ho la seguente:

[INFO] --- hibernate3-maven-plugin:2.2:hbm2java (hbm2java) @ project.persistence ---
[INFO] using configuration task.
[INFO] Configuration XML file loaded: file:/C:/Documents%20and%20Settings/mmm/workspace/project.persistence/target/hibernate3/generated-mappings/hibernate.cfg.xml
12:15:17,484  INFO org.hibernate.cfg.Configuration - configuring from url: file:/C:/Documents%20and%20Settings/mmm/workspace/project.persistence/target/hibernate3/generated-mappings/hibernate.cfg.xml
12:15:19,046  INFO org.hibernate.cfg.Configuration - Reading mappings from resource : package.name/Messages.hbm.xml
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.codehaus.mojo:hibernate3-maven-plugin:2.2:hbm2java (hbm2java) on project project.persistence: Execution hbm2java of goal org.codehaus.mojo:hibernate3-maven-plugin:2.2:hbm2java failed: resource: package/name/Messages.hbm.xml not found

Come faccio a trattare con questo? Naturalmente potrei aggiungere:

<outputDirectory>src/main/resources/package/name</outputDirectory>

alla meta hbm2hbmxml, ma penso che questo non è l'approccio migliore, o è? Esiste un modo per mantenere tutti il codice e le risorse di distanza dalla cartella src/ generato?

presumo, l'obiettivo di questo approccio non è quello di generare tutte le fonti nel mio src / main / java o / risorse di cartelle, ma per mantenere il codice generato nella cartella di destinazione. Mentre io in genere d'accordo con questo punto di vista, mi piacerebbe continuare con quella hbm2dao alla fine l'esecuzione e il confezionamento del project da usare come componente strato di persistenza generata dal livello di business. E 'questo anche quello che volevi dire?

È stato utile?

Soluzione

  

Come posso configurare hbm2cfgxml in modo che gli sguardi hibernate.cfg.xml come qui di seguito (...)

Ho un progetto che utilizza hbm2cfgxml e le voci <mapping resource="..."/> non riflettere l'packagename nel percorso al hbm.xml. Quindi c'è chiaramente qualcosa che non va al vostro fianco. Qui ci sono alcune osservazioni:

  • I legherebbe hbm2cfgxml sulla fase generate-resources, non sta generando fonti
  • Non genera il file in src/main/resources ma in target/classses (il motivo per cui si fa a mettere generato roba nell'albero dei sorgenti, si desidera un clean pulirlo).
  • C'è un errore di battitura, è configurationfile, non configurationFile ma ...
  • Perché diavolo hai una <configurationfile> nella configurazione di hbm2cfgxml? Si desidera generare qui ... Vorrei rimuoverlo.

Aggiornamento: Si dovrebbe mettere le informazioni necessarie per la connessione al database in src/main/resources/database.properties (che è il valore di default del propertyfile proprietà), non in src/main/resources/hibernate.cfg.xml (rimuovere quel file). Qui di seguito un database.properties campione:

hibernate.connection.driver_class=org.apache.derby.jdbc.ClientDriver
hibernate.connection.url=jdbc:derby://localhost:1527//home/pascal/Projects/derbyDBs/EMPLDB
hibernate.connection.username=APP
hibernate.connection.password=APP
hibernate.dialect=org.hibernate.dialect.DerbyDialect

E come ho detto, rimuovere il file src/main/resources/hibernate.cfg.xml, si desidera generare esso.

  

c'è un modo per dire Maven per copiare le risorse nella cartella di destinazione prima di eseguire hbm2java? (...)

Il hbm2java obiettivo Richiama l'esecuzione della fase del ciclo di vita del processo-risorse prima per l'esecuzione stessa (dalla documentazione). Ecco, questo è il comportamento predefinito e si verifica con hibernate3:hbm2java o generate-sources se hbm2java è legato ad esso.

Altri suggerimenti

Ok, ho risolto il mio problema forzando Maven per mettere i file hbm.xml nel / target / classi / pacchetto / nome cartella, così, alla fine del mio aspetto pom in questo modo:

<build>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>hibernate3-maven-plugin</artifactId>
            <version>2.2</version>
            <executions>
                <execution>
                    <id>hbm2cfgxml</id>
                    <phase>generate-resources</phase>
                    <goals>
                        <goal>hbm2cfgxml</goal>
                    </goals>
                    <inherited>false</inherited>
                    <configuration>
                        <components>
                            <component>
                                <name>hbm2cfgxml</name>
                                <implementation>jdbcconfiguration</implementation>
                            </component>
                        </components>
                        <componentProperties>
                            <packagename>package.name</packagename>
                        </componentProperties>
                    </configuration>
                </execution>
                <execution>
                    <id>hbm2hbmxml</id>
                    <phase>generate-resources</phase>
                    <goals>
                        <goal>hbm2hbmxml</goal>
                    </goals>
                    <inherited>false</inherited>
                    <configuration>
                        <components>
                            <component>
                                <name>hbm2hbmxml</name>
                                <outputDirectory>target/classes</outputDirectory>
                            </component>
                        </components>
                        <componentProperties>
                            <packagename>package.name</packagename>
                        </componentProperties>
                    </configuration>
                </execution>
                <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>
                <execution>
                    <id>hbm2dao</id>
                    <phase>generate-sources</phase>
                    <goals>
                        <goal>hbm2dao</goal>
                    </goals>
                    <inherited>false</inherited>
                    <configuration>
                        <components>
                            <component>
                                <name>hbm2dao</name>
                                <implementation>configuration</implementation>
                            </component>
                        </components>
                        <componentProperties>
                            <packagename>package.name</packagename>
                            <configurationfile>target/hibernate3/generated-mappings/hibernate.cfg.xml</configurationfile>
                        </componentProperties>
                    </configuration>
                </execution>
            </executions>
            <dependencies>
                <dependency>
                    <groupId>postgresql</groupId>
                    <artifactId>postgresql</artifactId>
                    <version>8.4-701.jdbc3</version>
                </dependency>
            </dependencies>
        </plugin>
    </plugins>
</build>

E funziona bene. Come fas come ho potuto vedere in altri post, in alcune fasi prima build quei file hbm.xml devono essere copiati da di destinazione / Hibernate3 / generate-mappature (dove vengono generati per impostazione predefinita) per target / classi / pacchetto / nome (dove ibernazione-tools sguardi per loro), ma nel mio caso non lo sono (che indica che sto facendo qualcosa di sbagliato). Quindi, se c'è qualcuno là fuori sapere che cosa potrebbe essere che sto facendo male, la prego di dirmi. Altrimenti Dovrà bastare.

C'è una cosa che non funziona: i nomi dei pacchetti non vengono utilizzati nelle POJO e DAO generato: ma ho creato un altro thread per questo qui .

Aggiornamento: ok, ora ho finalmente capito. Il problema con i nomi dei pacchetti mancante era nella configurazione del obiettivo hbm2hbmxml. Ho perso le componentProperties con packagename , in modo che il hbm.xml generato mancavano i nomi di classe non completamente classificati. Ho aggiornato il pom sopra, ora funziona benissimo. Il problema per quanto riguarda esplicitamente la copia dei file hbm.xml per di destinazione / classes cartella è ancora il caso, però.

Per un esempio su come utilizzare gli strumenti di Hibernate con Maven, senza l'utilizzo di Hibernate3-Maven-plug di controllo questo post . L'idea è quella di eseguire gli strumenti Hibernate task Ant con Maven. Questo approccio consente il pieno controllo sul processo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top