Как настроить Hibernate-Tools с Maven для генерации Hibernate.cfg.xml, * .hbm.xml, pojos и daos
-
27-09-2019 - |
Вопрос
Может ли кто-нибудь сказать мне, как заставить Maven предшествовать отображение файлов .hbm.xml в автоматически сгенерированном файле hibernate.cfg.xml с пути пакета?
Моя общая идея - это, я хотел бы использовать Hibernate-Tools через Maven для создания слоя настойчивого времени для моего приложения. Итак, мне нужен Hibernate.cfg.xml, затем все my_table_names.hbm.xml и в конце генерируется POJO. Тем не менее, то hbm2java
цель не будет работать, пока я поставил файлы .hbm.xml в src/main/resources/package/path/
папка но hbm2cfgxml
Указывает картографические файлы только по имени таблицы, т. Е.
<mapping resource="MyTableName.hbm.xml" />
Так что большой вопрос: как я могу настроить hbm2cfgxml
так что Hibernate.cfg.xml выглядит ниже:
<mapping resource="package/path/MyTableName.hbm.xml" />
Мой Pom.xml выглядит так, как это выглядит в данный момент:
<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>
А потом второй вопрос: есть ли способ сказать Maven для копирования ресурсов в целевую папку перед выполнением hbm2java
? На данный момент я использую
mvn clean resources:resources generate-sources
Для этого, но должен быть лучший способ.
Спасибо за любую помощь.
Обновлять:
@Pascal: Спасибо за помощь. Теперь путь к отображениям работает нормально, я не знаю, что было неверным раньше, хотя. Возможно, есть некоторая проблема с записью hibernate.cfg.xml во время чтения конфигурации базы данных из него (хотя файл обновляется).
Я удалил файл hibernate.cfg.xml, заменил его с базой данных. hbm2cfgxml
а также hbm2hbmxml
. Отказ Я также не использую outputDirectory
ни configurationfile
в этих целях больше.
В результате файлы hibernate.cfg.xml
и все *.hbm.xml
Сгенерированы в мою цель / Hibernate3 / сгенерированные сопоставления / папки, что является значением по умолчанию. Тогда я обновил hbm2java
Цель со следующим:
<componentProperties>
<packagename>package.name</packagename>
<configurationfile>target/hibernate3/generated-mappings/hibernate.cfg.xml</configurationfile>
</componentProperties>
Но тогда я получаю следующее:
[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
Как мне иметь дело с этим? Конечно, я мог бы добавить:
<outputDirectory>src/main/resources/package/name</outputDirectory>
к тому hbm2hbmxml
Цель, но я думаю, что это не самый лучший подход, или это? Есть ли способ сохранить все сгенерированный код и ресурсы вдали от src/
папка?
Я предполагаю, что целью этого подхода не является не генерировать какие-либо источники в мою папку SRC / MAIN / Java или / Resource, но чтобы сгенерированный код в целевой папке. Как я обычно согласен с этой точкой зрения, я бы хотел продолжать с этим в конечном итоге выполнять hbm2dao
и упаковывая проект, который будет использоваться в качестве сгенерированного компонента слоя настойчивости от бизнес-слоя. Это также то, что вы имели в виду?
Решение
Как я могу настроить HBM2CFGXML, чтобы Hibernate.cfg.xml выглядит как ниже (...)
У меня есть проект, который использует hbm2cfgxml
и то <mapping resource="..."/>
Записи отражают упаковку на пути к hbm.xml
. Отказ Так что на вашей стороне явно что-то не так. Вот несколько замечаний:
- Я бы связывал
hbm2cfgxml
наgenerate-resources
фаза, вы не генерируете источники - Я бы не сгенерировал файл в
src/main/resources
но вtarget/classses
(Почему вы размещаете генерируемые вещи в исходное дерево, вы хотитеclean
очистить его). - Есть опечатка, это
configurationfile
, нетconfigurationFile
но... - Почему, черт возьми, у тебя есть
<configurationfile>
в конфигурацииhbm2cfgxml
? Вы хотите создать его здесь ... Я бы удалил его.
Обновлять: Вы должны поставить информацию, необходимую для подключения к базе данных в src/main/resources/database.properties
(это значение по умолчанию propertyfile
недвижимость), не в src/main/resources/hibernate.cfg.xml
(Удалите этот файл). Ниже образец database.properties
:
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
И как я уже сказал, удалите src/main/resources/hibernate.cfg.xml
Файл, вы хотите создать его.
Есть ли способ сказать Maven для копирования ресурсов в целевую папку перед выполнением HBM2Java? (...)
То hbm2java
цель Вызывает выполнение процессов фазы жизненного цикла до выполнения самого выполнения (Из документации). Так что это поведение по умолчанию и происходит с hibernate3:hbm2java
или generate-sources
если hbm2java
связан с этим.
Другие советы
Хорошо, я исправил свою проблему, заставляя Maven поставить hbm.xml
файлы в то / Цель / Классы / Пакет / имя Папка, так в конце концов мой POM выглядит так:
<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>
И это работает нормально. Как ФАС, как я мог видеть на других постах, в некоторых ранних фазах сборки те hbm.xml
Файлы должны быть скопированы из Цель / hibernate3 / сгенерированные сопоставления (где они генерируются по умолчанию), чтобы Цель / классы / пакет / имя (Где Hibernate-Tools ищет их), но в моем случае они не являются (что указывает, что я делаю что-то не так). Так что, если кто-нибудь там знает, что это может быть, я делаю не так, пожалуйста, скажи мне. В противном случае это придется достаточно.
Существует одна вещь, которая не работает: имена пакетов не используются в сгенерированных pojos и daos: но я создал другую нить для этого здесь.
Обновлять: Хорошо, теперь я наконец получил это. Проблема с отсутствующими именами пакета была в hbm2hbmxml
Конфигурация цели. Я пропустил Компонентные способы с участием имя пакета там, поэтому генерируется hbm.xml
пропустил полностью классифицированные названия классов. Я обновил вышеупомянутый POM, теперь он работает нормально. Проблема относительно явного копирования hbm.xml
Файлы к тому Цель / классы Папка по-прежнему это дело, хотя.
Например, о том, как использовать Hibernate Tools с Maven, без использования проверки Hibernate3-Maven-Plugin эта почта. Отказ Идея состоит в том, чтобы запустить Hibernate Tools Ant Task с Maven. Этот подход дает вам полный контроль над процессом.