Инструмент гибернации, реверс-инжиниринг - PullRequest
4 голосов
/ 24 февраля 2012

У меня следующий вопрос об инструментах и ​​конфигурации Hibernate: я настраиваю hibernate для генерации классов JPA из базы данных с помощью обратного инжиниринга, например:

hibernate.cfg.xml

 <?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.bytecode.use_reflection_optimizer">false</property>
       <property    name="hibernate.connection.driver_class">oracle.jdbc.OracleDriver</property>
       <property name="hibernate.connection.password">pass</property>
       <property name="hibernate.connection.url">jdbc:oracle:thin:url</property>
       <property name="hibernate.connection.username">user</property>
       <property name="hibernate.default_schema">schema</property>
       <property     name="hibernate.dialect">org.hibernate.dialect.OracleDialect</property>
    </session-factory>
  </hibernate-configuration>

тогда у меня есть для обратного проектирования конфиг:

hibernate.reveng.xml

<hibernate-reverse-engineering>
  <table-filter match-name="TB1"/>
    <table name="TB_1" class="com.classtb1">
     <column name="ENDPAGE" property="pageIntervalEnd"/>
     <column name="SELECTABLE" property="selectableInd"/>
  </table>
</hibernate-reverse-engineering>

Это образец одной таблицы, которая отображается в этом файле конфигурации обратного инжиниринга.

Теперь по умолчанию все отношения от сущностей генерируются так:

  @Entity
  @Table(name="TB1"
  )
  public class Classtb1  implements java.io.Serializable {
   ...
        private Set<Classtb1Entry> classtb1= new HashSet<Classtb1Entry>(0);
   ...
       @OneToMany(fetch=FetchType.LAZY, mappedBy="Classtb1")
    public Set<Classtb1Entry> getClasstb1Entries() {
      return this.classtb1Entries;
    }
  }

Файл maven pom.xml выглядит так:

  <profiles>
  <profile>
    <id>WithoutDBGen</id>
  </profile>
  <profile>
   <id>Full</id>
  <activation>
    <activeByDefault>true</activeByDefault>
  </activation>
  <build>
    <plugins>
      <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>hbm2cfgxml</goal>
            </goals>
            <inherited>false</inherited>
            <configuration>
              <components>
                <component>
                  <name>hbm2cfgxml</name>
                  <implementation>jdbcconfiguration</implementation>
                </component>
              </components>
              <componentProperties>
                <packagename>com.persistence.jpa</packagename>
                <revengfile>src/main/resources/hibernate.reveng.xml</revengfile>
              </componentProperties>
            </configuration>
          </execution>

          <execution>
            <id>generate-hbm-xml-files</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>com.persistence.jpa</packagename>
                <revengfile>src/main/resources/hibernate.reveng.xml</revengfile>
                <detectoptmisticlock>false</detectoptmisticlock>
              </componentProperties>
            </configuration>
          </execution>

          <execution>
            <id>generate-jpa-entities</id>
            <phase>generate-sources</phase>
            <goals>
              <goal>hbm2java</goal>
            </goals>
            <inherited>false</inherited>
            <configuration>
              <components>
                <component>
                  <name>hbm2java</name>
                  <implementation>annotationconfiguration</implementation>
                  <outputDirectory>src/main/generated</outputDirectory>
                </component>
              </components>
              <componentProperties>
                <packagename>com.persistence.jpa</packagename>
                <configurationfile>target/hibernate3/generated-mappings/hibernate.cfg.xml</configurationfile>
                <templatepath>target/hibernate3/generated-mappings/</templatepath>
                <ejb3>true</ejb3>
                <jdk5>true</jdk5>
              </componentProperties>
            </configuration>
          </execution>

          <execution>
            <id>generate-dao</id>
            <phase>generate-sources</phase>
            <goals>
              <goal>hbm2dao</goal>
            </goals>
            <inherited>false</inherited>
            <configuration>
              <components>
                <component>
                  <name>hbm2dao</name>
                  <implementation>annotationconfiguration</implementation>
                  <outputDirectory>src/main/generated</outputDirectory>
                </component>
              </components>
              <componentProperties>
                <packagename>com.persistence.dao</packagename>
                <configurationfile>target/hibernate3/generated-mappings/hibernate.cfg.xml</configurationfile>
                <templatepath>target/hibernate3/generated-mappings/</templatepath>
                <ejb3>true</ejb3>
                <jdk5>true</jdk5>
              </componentProperties>
            </configuration>
          </execution>

        </executions>

      </plugin>
    </plugins>
    </build>
    </profile>
   </profiles>

Где я могу настроитьодно отношение, как в случае с TB1, вместо

@OneToMany(fetch=FetchType.LAZY

i want to generate 

@OneToMany(fetch=FetchType.EAGER ?

Где я могу настроить эту опцию в моем случае?

Вторая проблема, с которой я столкнулся, связана с генерацией DAO, классами DAOпо умолчанию помечены как @Stateless, как я могу указать это, чтобы мои DAO были помечены другой аннотацией, такой как @Repository, или, по крайней мере, без аннотации?

1 Ответ

1 голос
/ 27 февраля 2012

Я только что нашел эту ссылку на форуме в спящем режиме: https://forum.hibernate.org/viewtopic.php?f=1&t=1003635 Кажется, нет возможности настроить это поведение в файле конфигурации обратного проектирования, что действительно печально. Обратный инжиниринг создает файлы hbm.xml. В файле hbm.xml вы можете настроить параметр загрузки lazy (lazy = "true") или eager (lazy = "false"), но не раньше. Возможно, здесь будет работать задача maven для изменения сгенерированного hbm.xml.

Если у кого-то есть другая идея, я бы по достоинству оценил это, я все еще ищу возможность.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...