[英]JPA Metamodel and entity classes
我可以在運行時創建元模型的實體類,還是必須手動創建它們?
如果我可以在運行時創建它們(假設使用EntityType
),則此解決方案的優缺點是什么?
好的,有些誤解了。我想我應該為我的所有實體類創建N個名稱為EntityClass_的類。現在,我注意到Netbeans在構建項目時會創建文件EntityClass_.class,我可以參考他們! 有關更多信息,要在netbeans中激活此選項,請使用網頁上的鏈接來說明此選項:
http://blogs.oracle.com/arungupta/entry/totd_148_jpa2_metamodel_classes
好的,現在的問題是:如何選擇正確的答案? :)對不起,煤層,但皮奧特(Piotr)更加清晰具體。
只有在編譯時生成靜態元模型才有意義,因為它是一種編譯時安全的技術,可確保您鏈接到實際存在的屬性。 與動態查找屬性相比,使用靜態元模型沒有運行時優勢,這完全是避免程序員錯誤。
您可以自己創建一個元模型,也可以使用元模型生成器來完成。 該生成器特定於JPA提供程序,例如,對於EclipseLink,可以如下執行:
javac -processor org.eclipse.persistence.internal.jpa.modelgen.CanonicalModelProcessor
-proc:only
-classpath lib/*.jar;punit
*.java
但是,它不是在運行時執行的,而是在構建應用程序時或作為單獨的進程執行的。 在運行時執行此操作沒有多大意義,因為在創建查詢時需要此元模型(當然,如果要使用它),因此在開發階段就需要這樣做。
只是為了使這個答案更完整-您還可以使用EntityManager#getMetamodel()
或EntityManagerFactory#getMetamodel()
來訪問不指定它的元模型。
我肯定會選擇在設計Criteria API查詢時顯式生成元模型並使用它。 它只是使其更加清晰,明顯,並讓您在開發階段發現錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.