2010-05-17 3 views
5

Я пытаюсь настроить hbm2java с maven для генерации POJO-классов и объектов DAO. Одна из проблем, с которыми я сталкиваюсь, - это не имена пакетов. Я использую следующий POM для этого:Как настроить hbm2java и hbm2dao для добавления packagename в сгенерированные классы

<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> 

Но сгенерированный код начинается со следующим:

// 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 { 

Есть ли способ заставить Maven для генерации этого ПАКЕТА части, как это определенно в packagename?

Update:

Вот мой hibernate.cfg.xml, также автоматически генерируется Hibernate-инструментов (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

Что делает ваш файл hibernate.cfg.xml выглядеть. Возможно ли, что файл переопределяет настройку? Также обратите внимание, что указанный вами конфигурационный файл с ошибкой, hibernane.cfg.xml. Я не уверен, что это намеренно или нет. – tschaible

+0

Опечатка возникла при копировании и форматировании кода для StackOverflow, но спасибо. Я добавил hibernate.cfg.xml. – mmm

ответ

3

На всякий случай, вот рабочая конфигурация hibernate3-Maven-плагин для восходящего подхода:

<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> 

А вот содержание моего 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 

Эта установка:

  1. Формирует *.hbm.xml в target/classes (с пакетом) в течение generate-resources.
  2. Производит hibernate.cfg.xml в target/classes с элементами для файлов сопоставления.
  3. Создает сущности из сопоставлений в target/generated-sources/hibernate3 (я рекомендую следовать соглашению target/generated-sources/<tool> для сгенерированных источников, чтобы они автоматически определялись IDE).

Вот результат clean compile против образца базы данных с двумя таблицами:

 
$ 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

Ницца, проще, чем у меня :). У вас есть ключ к тому, почему файлы hbm.xml автоматически не копируются в целевые/классы из сгенерированных источников/hibernate3/сгенерированных сопоставлений до того, как выполняется генерация целей источников? Я вижу, что вы также заставляете maven размещать эти файлы непосредственно в папке target/classes. Разве нет способа настроить это как-то? – mmm

+0

@mmm Я не знаю, почему они не являются (плагин должен * добавить * этот каталог в качестве каталога ресурсов в pom). Должно быть возможно использовать плагин Build Helper (см. Страницу [Usage] (http://mojo.codehaus.org/build-helper-maven-plugin/usage.html)) для этого. Но это было бы более подробным, и я не вижу реальных преимуществ. Так что, поскольку решение, которое я использую, просто работает, я никогда не пытался сделать это по-другому. –