EclipseLink Canonical Metamodel来自已编译的实体类

时间:2015-04-23 00:29:13

标签: java jpa annotations eclipselink metamodel

我似乎无法弄清楚我应该如何让EclipseLink的CanonicalModelProcessor为在orm.xml文件中映射的实体生成元数据类,哪些不是当前编译单元中的源文件,而是包含在编译器的类路径中

我正在尝试使用maven,只需调用编译器插件而无需任何其他选项。我可以验证EclipseLink注释处理器是否执行,并找到persistence.xml和orm.xml,并成功处理这两个文件。它只在内部遍历“RoundElement”类并尝试映射持久性单元中定义的内容时才会失败。显然,类路径中的类不在“roundElements”列表中,因此没有为它们生成代码,即使它们的元数据在内部PersistenceUnit对象中存在且有效。

有没有人知道如何才能让它发挥作用? 谢谢!

编辑: 摘录pom.xml:

<dependencies>
  <dependency>  
    <groupId>com.model</groupId>
    <artifactId>app-model</artifactId>  
    <version>1.0.0</version>
  </dependency>
  <dependency>  
    <groupId>org.eclipse.persistence</groupId>  
    <artifactId>eclipselink</artifactId>  
    <version>2.5.2</version>
  </dependency>
  <dependency>
    <groupId>org.eclipse.persistence</groupId>
    <artifactId>org.eclipse.persistence.jpa.modelgen.processor</artifactId>  
    <version>2.5.2</version>
  </dependency>

  <build>
    <plugins>  
        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>  
        </plugin>  
    </plugins>  
  </build>

摘自orm.xml:

...
<entity class="com.model.app.AppClass">
    .... AppClass is defined in app-model artifact
</entity>

1 个答案:

答案 0 :(得分:0)

好的 - 看看EclipseLink注释处理器的源代码,似乎这只是“不可能”。 AP遍历编译器遇到的源元素,并将它们与从JPA元模型加载的内容进行匹配 - 而不是相反。 现在,我创建了一个EclipseLink注释处理器的修补版本,该处理器另外遍历XML中定义的实体,嵌入式和映射的超类,并将它们与编译时类路径中的二进制元素进行匹配。这样,就可以生成完整的元模型。