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