2012-02-24 112 views
4

我对Hibernate的工具和配置以下问题: 我配置Hibernate来从这样的逆向工程数据库genrate JPA类:Hibernate的工具,逆向工程

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

在哪里我可以配置这个选项在我的cas e?

我遇到的第二个问题是DAO生成,DAO类默认注释为@Stateless,我怎么能指定这个,所以我的DAO用@Repository或至少没有注释等注释来注释?

回答

1

我刚刚找到有关休眠这个论坛链接: https://forum.hibernate.org/viewtopic.php?f=1&t=1003635 看来是没有可能的逆向工程的配置文件来配置此行为,什么是真正可悲的。 逆向工程正在生成hbm.xml文件。 在文件hbm.xml中,您可以配置加载选项lazy(lazy =“true”)或eager(lazy =“false”),但不能在之前。 也许有一个maven任务来修改生成的hbm.xml将在这里工作。

如果任何人有任何其他的想法,我真的会赞赏这一点,我仍然在寻找一种可能性。