JPA元模型和实体类



我可以在运行时创建元模型的实体类还是必须手动创建它们?

如果我可以在运行时创建它们(我想使用EntityType),这个解决方案的优点和缺点是什么?

好吧,有一点小误会…我认为我应该为我所有的实体类创建N个名为EntityClass_的类…现在我注意到Netbeans在构建项目时创建了文件EntityClass_.class,我可以引用它们!要了解更多信息,请在netbeans中激活此选项,这里是解释此选项的网页链接:

http://blogs.oracle.com/arungupta/entry/totd_148_jpa2_metamodel_classes

好的,现在的问题是:我如何选择正确的答案?:)对不起,Seam,但是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查询时使用它。它只是使它更清晰,更明显,并让您在开发阶段发现错误。

相关内容

最新更新