我可以在运行时创建元模型的实体类,还是必须手动创建它们?
如果我可以在运行时创建它们(使用EntityType
我认为)这个解决方案有哪些优点和缺点?
好的,有一点想法...我认为我应该为所有实体类创建名为EntityClass_的N类...现在我注意到Netbeans在构建项目时创建了EntityClass_.class文件可以向他们提供帮助! 有关更多信息,要在netbeans中激活此选项,请在网页上解释此选项的链接:
http://blogs.oracle.com/arungupta/entry/totd_148_jpa2_metamodel_classes
好的,现在的问题是:我如何选择正确的答案? :) 对不起Seam,但Piotr更清晰,更具体......
答案 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查询时使用它。它只是使它更清晰,更明显,让你在开发阶段找到错误。