如何在hbm2java中创建注释创建POJO?

时间:2010-03-29 15:41:27

标签: java hibernate orm hbm2java

我使用hibernate的当前设置使用hibernate.reveng.xml文件生成各种hbm.xml文件。然后使用hbm2java将其转换为POJO。我们在设计模式时花了一些时间,在表和列上放置了一些相当不错的描述。我可以使用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

那么如何告诉{{1}}将这些注释放入创建的Java文件中?

我已阅读this有关编辑freemarker模板以更改代码生成方式的信息。我坚持这个概念,但除了前后条件的例子之外,没有详细说明你还能做些什么呢。

1 个答案:

答案 0 :(得分:3)

在生成的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> 

因此,为了得到类似的东西,但包括表和列的注释,我对Javadoc Comments in POJOs线程的理解是你必须修改用于生成hbm文件的模板。

为此,请查看 hibernate-tools.jar hbm/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>

等等。