JPA元模型和实体类

时间:2011-12-05 09:38:03

标签: java jpa-2.0

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

如果我可以在运行时创建它们(使用EntityType我认为)这个解决方案有哪些优点和缺点?

好的,有一点想法...我认为我应该为所有实体类创建名为EntityClass_的N类...现在我注意到Netbeans在构建项目时创建了EntityClass_.class文件可以向他们提供帮助! 有关更多信息,要在netbeans中激活此选项,请在网页上解释此选项的链接:

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

好的,现在的问题是:我如何选择正确的答案? :) 对不起Seam,但Piotr更清晰,更具体......

2 个答案:

答案 0 :(得分:3)

只有在编译时生成静态元模型才有意义,因为它是一种编译时安全技术,可确保您链接实际存在的属性。与动态查找属性相比,使用静态元模型没有运行时优势,它完全是为了避免程序员错误。

答案 1 :(得分:2)

您可以自己创建Metamodel,也可以使用Metamodel Generator为您完成。此生成器特定于JPA提供程序,即对于EclipseLink,它可以像这样执行:

javac -processor org.eclipse.persistence.internal.jpa.modelgen.CanonicalModelProcessor 
      -proc:only 
      -classpath lib/*.jar;punit 
      *.java

但是它不是在运行时执行,而是在构建应用程序时或作为单独的进程执行。在运行时没有太大意义,因为在创建查询时你需要这个(当然如果你想使用它)元模型,所以在开发阶段。

只是为了让这个答案更加完整 - 您还可以使用EntityManager#getMetamodel()EntityManagerFactory#getMetamodel()访问元模型,而无需指定它。

我肯定会选择显式生成元模型并在制作Criteria API查询时使用它。它只是使它更清晰,更明显,让你在开发阶段找到错误。