繁体   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