簡體   English   中英

JPA元模型和實體類

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM