5

休止状態を使用する現在のセットアップでは、ファイルを使用hibernate.reveng.xmlしてさまざまなファイルを生成しhbm.xmlます。その後、 を使用して POJO に変換されhbm2javaます。スキーマの設計に時間を費やして、テーブルとそこの列に適切な説明を配置しました。hbm.xmlを使用して生成するときに、これらの説明をファイルに取り込むことができますhbm2jhbmxml

だから私はこれに似たものを得る:

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

hbm2javaでは、これらのコメントをプルして、作成された Java ファイルに配置するにはどうすればよいでしょうか?

freemarker テンプレートを編集してコードの生成方法を変更する方法については、これを読みました。私はその概念を理解していますが、事前および事後条件の例を超えて、他に何ができるかについては詳しく説明していませんでした.

4

1 に答える 1

4

生成された POJO に javadoc を追加する通常の方法はmeta、次のサンプルのようにタグを使用することです。

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

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

したがって、テーブルと列のコメントを含めて似たようなものを取得するには、POJOスレッドの Javadoc コメントに関する私の理解では、hbm ファイルの生成に使用されるテンプレートを変更する必要があるということです。

そのためには、hibernate-tools.jarhbm/persistentclass.hbm.ftlhbm/property.hbm.ftlなどの freemarker テンプレート (これは完全なリストではありません) を見て、それらを変更します。

たとえば、hbm/persistentclass.hbm.ftlでは、次の代わりに:

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

私はあなたができると思います:

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

等々。

于 2010-04-01T13:33:28.873 に答える