views:

242

answers:

1

My current setup using hibernate uses the hibernate.reveng.xml file to generate the various hbm.xml files. Which are then turned into POJOs using hbm2java. We spent some time while designing our schema, to place some pretty decent descriptions on the Tables and there columns. I am able to pull these descriptions into the hbm.xml files when generating them using hbm2jhbmxml.

So I get something similar to this:

<class name="test.Person" table="PERSONS">
  <comment>The comment about the PERSONS table.</comment>
  <property name="firstName" type="string">
      <column name="FIRST_NAME" length="100" not-null="true">
          <comment>The first name of this person.</comment>
      </column>
  </property>
  <property name="middleInitial" type="string">
      <column name="MIDDLE_INITIAL" length="1">
          <comment>The middle initial of this person.</comment>
      </column>
  </property>
  <property name="lastName" type="string">
      <column name="LAST_NAME" length="100">
          <comment>The last name of this person.</comment>
      </column>
  </property>
</class>

So how do I tell hbm2java to pull and place these comments in the created Java files?

I have read over this about editing the freemarker templates to change the way code is generated. I under stand the concept, but it was not to detailed about what else you could do with it beyond there example of pre and post conditions.

+2  A: 

The usual way to add javadoc in generated POJOs is to use meta tags, like in this sample:

<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 2.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd"&gt;

<class name="Person">
  <meta attribute="class-description">
  Javadoc for the Person class
  @author Frodo
  </meta>

  <id name="id" type="long">
    <meta attribute="scope-set">protected</meta>
    <generator class="increment"/>
  </id>
  <property name="name" type="string">
    <meta attribute="field-description">The name of the person</meta>
  </property>
</class> 

So, to get something similar but including the comments of your tables and columns, my understanding of the Javadoc Comments in POJOs thread is that you'd have to modify the templates used to generate hbm files.

To do so, look at the freemarker templates of hibernate-tools.jar, hbm/persistentclass.hbm.ftl, hbm/property.hbm.ftl, etc (this is not an exhaustive list) and modify them.

For example, in hbm/persistentclass.hbm.ftl, instead of:

<#if clazz.table.comment?exists  && clazz.table.comment?trim?length!=0>
 <comment>${clazz.table.comment}</comment>
</#if>

I guess that you could do:

<#if clazz.table.comment?exists  && clazz.table.comment?trim?length!=0>
 <meta attribute="class-description">
  ${clazz.table.comment}
 </meta>
 <comment>${clazz.table.comment}</comment>
</#if>

And so on.

Pascal Thivent
@Pascal That looks like what I am looking for. I'll come back and accept it once I am able to actually try it. Thanks for the help.
jschoen