2013-07-16 47 views
0

我使用hbm文件通過Ant任務使用hbm2java生成POJO對象。我試圖改變一些硬編碼值在我的XML使用org.hibernate.type.EnumType到ENUM:在Hibernate hbm文件中使用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「未找到枚舉類」。我意識到,我需要我的類添加到classpath在我的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,然後編譯剩下的東西。

這似乎很奇怪,但這是最好的解決方案嗎? 還是有沒有其他解決方案,我沒有想到?例如,是否有任何方法讓它查看我的源代碼?

回答

2

我結束使用我提出的解決方案,通過添加一個ant任務,只編譯運行hbm2java所需的類。該任務被命名爲「建設 - 休眠依賴性」,所以我只需要添加一個依賴屬性,我調用:hbm2java目標是:

<target name="hbm2java" depends="build-hibernate-dependencies"> 
    <hibernatetool destdir="${src.dir}"> 

    ... 

    </hibernatetool> 
</target> 

目標「集結休眠依賴性」編譯枚舉到構建目錄:

<target name="build-hibernate-dependencies"> 
    <mkdir dir="${build.dir}" /> 
    <javac destdir="${build.dir}"> 
     <src path="${src.dir}/enums" /> 
    </javac> 
</target> 

然後,我現在可以編譯整個項目。

相關問題