Middlegen

昨日のMiddlegenで吐き出された*.hbm.xmlに不具合があった。
テーブル名の終わりに「s」がついてると、「s」をのけた状態で作られるみたい。
原因を突き詰めたところ、middlegen Taskのオプションで

singularize="false"

というのを入れておけばいいみたい。

<?xml version="1.0"?>
<project name="middlegen" default="default" basedir=".">
  <property file="build.properties" />
  <description>
            Middlegen
  </description>

  <property name="hbm.output" value="${basedir}/WEB-INF/src" />
  <property name="appname" value="アプリ名" />

  <path id="lib.path">
    <fileset dir="${basedir}/WEB-INF/lib">
      <include name="*.jar" />
    </fileset>
  </path>
  <taskdef name="middlegen" classname="middlegen.MiddlegenTask" classpathref="lib.path" />
  <taskdef name="hbm2java" classname="net.sf.hibernate.tool.hbm2java.Hbm2JavaTask" classpathref="lib.path" />

  <target name="default">
    <echo message="usage:" />
    <echo message="ant middlegen :テーブルからマッピングファイルを作成します" />
    <echo message="ant hbm2java :マッピングファイルからJavaBeanを作成します" />
  </target>
  <target name="middlegen" description="Middlegen Task">
    <middlegen appname="${appname}" prefsdir="${basedir}" gui="no" databaseurl="${db.url}" driver="${db.driver}" username="${db.username}" password="${db.password}" singularize="false">
      <!-- 出力するテーブルを書く -->
      <table name="テーブル名" />
      <hibernate destination="${hbm.output}" package="パッケージ名" equalsHashcode="true" dynamicUpdate="true" dynamicInsert="true" javaTypeMapper="middlegen.plugins.hibernate.HibernateJavaTypeMapper" />
    </middlegen>
    <!-- Middlegenの設定ファイルを毎回削除する -->
    <delete file="${basedir}/${appname}-prefs.properties" />
  </target>

  <target name="hbm2java" description="hbm2java Task" depends="middlegen">
    <hbm2java output="${hbm.output}">
      <fileset dir="${hbm.output}">
        <include name="**/*.hbm.xml" />
      </fileset>
    </hbm2java>
  </target>
</project>


  • build.properties
db.driver=ドライバ名
db.url=DBのurl
db.username=DB接続のユーザー名
db.password=DB接続のパスワード

Middlegenの設定ファイルを消しているのは、singularize="false"とか入れたりはずしたりしてたら、前の状態を保存しているようでそのために上手くコードに反映されなかったりしたので消すようにしました。

sequenceを判別してくれないのはどうにかしたいなぁ。
いちいち手動で書き直すのは面倒だ。