[英]How to generate JPA Static-Metamodel without annotations?
我想將JPA 2.0 Criteria API應用於Hibernate舊版應用程序,以獲取類型安全的查詢。 手動創建模型不是一種選擇。 也沒有引入注釋(即,將* .hbm.xml映射轉換為JPA注釋)。
到目前為止,我嘗試使用Hibernate的“ hibernate-jpamodelgen-4.3.6.Final.jar ”生成器沒有任何運氣。 這個想法是要在Hibernate的注釋處理器( JPAMetaModelEntityProcessor
)中加入一個“虛擬”實體。 然后,因此,我希望JPAMetaModelEntityProcessor
能夠檢測到persistence.xml,並最終變得足夠聰明 ,也可以檢測到XML配置的實體。
在問了這個問題三年后,Hibernate v。5.2.12真是很遺憾,要找到不使用注解就如何生成元模型仍然不容易。 無論如何,我將在這里描述我的解決方案,因為該問題(沒有任何答案)會作為查詢“生成不帶注釋的元模型”的搜索結果彈出。 我在這個任務上有些掙扎,但是畢竟我在這個ANT任務中達到了目標:
<target name="jpa_metamodel">
<delete dir="..\\src_tmp"/>
<copy todir="..\\src_tmp">
<fileset dir="..\\src">
<include name="my/model/package/*.java"/>
<include name="META-INF/**/*.xml"/>
</fileset>
</copy>
<replace file="../src_tmp/my/model/package/AbstractEntity.java" token="class" value="@javax.persistence.Entity class"/>
<javac srcdir="..\\src_tmp"
destdir="..\\src_jpa_generated"
failonerror="true"
fork="false">
<compilerarg value="-proc:only"/>
<compilerarg line="-s ..\\src_jpa_generated"/>
<compilerarg line="-Adebug=true"/>
<classpath>
<fileset dir="..\\dependencies\\hibernate">
<include name="**\\*.jar"/>
</fileset>
<pathelement location="../src_tmp"/> <!-- to put META-INF in classpath -->
</classpath>
</javac>
</target>
Hibernate medamodel生成器的問題是:
在類路徑中而不是源文件夾中搜索/META-INF/persistence.xml
和/META-INF/orm.xml
。 但是,這似乎還不夠,因為在將映射XML添加到類路徑中之后,可以正確地發現它們,並且生成器進程提到了類(發出了每個類的日志條目),但是由於某種原因,仍然沒有產生輸出。 所以下一步
如果沒有實際注釋,似乎真的不可能走得更遠。 也許是這樣,但是我仍然不知道如何,但是我可以忍受簡單的解決方法。 我只是自動將@Entity
批注添加到臨時復制的源中。 實際上,我僅在一個文件中添加了注釋,但就我而言,它恰好是實體層次結構的根。 這可能有意思,也可能沒有意思-我沒有打擾過。 但是,此步驟的需要表明,可能難以(不可能?)為沒有注釋的已編譯實體類生成元模型。
您需要記住-s編譯器arg,以將生成的* .java文件存儲在某個位置。
希望這對將來的人會有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.