我正在使用hbm文件通过Ant任务使用hbm2java生成我的POJO对象。我正在尝试使用我的XML中的org.hibernate.type.EnumType将一些硬编码值更改为Enum:
<set name="myCollection" table="table_name" lazy="true">
<key column="ref_id"/>
<element column="col" not-null="true">
<type name="org.hibernate.type.EnumType">
<param name="enumClass">my.path.MyEnum</param>
<param name="type">12</param>
<param name="useNamed">true</param>
</type>
</element>
</set>
我第一次尝试运行hbm2java导致MyEnum发现'Enum class not found'。我意识到我需要将我的类添加到我的ant文件中的类路径中:
<hibernatetool destdir="${src.dir}">
<classpath>
<path location="${build.dir}"/>
</classpath>
<configuration configurationfile="${basedir}/sql/hibernate.cfg.xml" >
<fileset dir="${src.dir}" id="id">
<include name="model/*.hbm.xml" />
</fileset>
</configuration>
<hbm2java ejb3="false" jdk5="true" />
</hibernatetool>
这一切都有效,但事实证明这只是因为我已经编译了${src.dir}
到${build.dir}
的所有内容。如果我从一个“干净”状态开始,我再次得到'Enum class not found',因为它有一个循环依赖:为了编译代码,我需要POJO。但是为了获得POJO,我需要编译代码。
我能想到的唯一解决方案是首先在enum包中编译所有内容,然后运行hbm2java,然后编译其余部分。
我觉得很奇怪,但这是最好的解决方案吗? 或者是否有其他一些我没想过的解决方案?例如,有没有办法让它看一下我的源代码?
答案 0 :(得分:2)
我最后使用我提出的解决方案,添加了一个只编译运行hbm2java所需类的ant任务。该任务命名为&#34; build-hibernate-dependencies&#34;,所以我只需为我的hbm2java目标添加一个depends属性:
<target name="hbm2java" depends="build-hibernate-dependencies">
<hibernatetool destdir="${src.dir}">
...
</hibernatetool>
</target>
目标&#34; build-hibernate-dependencies&#34;将枚举编译到构建目录:
<target name="build-hibernate-dependencies">
<mkdir dir="${build.dir}" />
<javac destdir="${build.dir}">
<src path="${src.dir}/enums" />
</javac>
</target>
之后,我现在可以编译整个项目了。