如何使用eclipselink-orm.xml文件覆盖orm.xml文件中的某些元素,而不是替换它们?

时间:2016-01-15 19:11:45

标签: jpa eclipselink

page documenting the eclipselink-orm.xml file部分说:

  

此映射文件可用于代替JPA的标准映射文件,或可用于覆盖JPA映射文件

我对后者感兴趣,而不是前者。

因此,我将以下内容放在我的META-INF/persistence.xml文件中:

<mapping-file>META-INF/my-orm.xml</mapping-file>
<mapping-file>META-INF/my-eclipselink-orm.xml</mapping-file>

他们被接受了。

现在,请注意我不希望my-eclipselink-orm.xml的内容成为my-orm.xml内容的超集。我只想在其中放置必要的最低限度的XML(在语义上)将某些特定于EclipseLink的功能添加到my-orm.xml中指定的给定映射中。

现在假设我<one-to-many>中的my-orm.xml映射名为names。 (基本的,基本的东西。)

现在假设my-eclipselink-orm.xml我想在语义上将<batch-fetch>元素添加到该映射中。

如果我这样做:

<entity class="the.entity.class.in.Question">
  <attributes>
    <one-to-many name="names">
      <batch-fetch size="10" type="JOIN"/>
    </one-to-many>
  </attributes>
</entity>

...然后EclipseLink对我大吼:

Conflicting XML elements [<one-to-many>] with the same name [names] were found. The first was found in the mapping file [file:/Users/ljnelson/Projects/foo/target/classes/META-INF/my-eclipselink-orm.xml] and the second in the mapping file [file:/Users/ljnelson/Projects/foo/target/classes/META-INF/my-real-orm.xml]. Named XML elements must be unique across the persistence unit.

那么如何使用orm.xml覆盖“真实”eclipselink-orm.xml仅部分

1 个答案:

答案 0 :(得分:0)

这种情况见例6-4: http://www.eclipse.org/eclipselink/documentation/2.6/jpa/extensions/schema.htm

由于显式列出了my-eclipselink-orm.xml,因此将其视为JPA orm.xml文件。您需要将文件重命名为eclipselink-orm.xml并从persistence.xml中删除标记,以便您的情况与示例6-3匹配。文档声明它应该合并映射,但是这一点的例子并不清楚。