如何指定要在生成的persistence.xml中使用的持久性单元名称?

时间:2018-01-26 17:20:39

标签: hyperjaxb

我们广泛使用Hyperjaxb3(版本0.6.2)来创建和定制我们的JPA实体类。

一个小麻烦是,当我们添加到我们的模式时,生成的持久性单元名称有时会发生变化。特别是,当我们1)更改包含的XSD文件中的XML命名空间,2)从编译中删除命名空间,或3)在编译中添加命名空间时,就会发生这种情况。

生成命名空间似乎是编译中包含的(按摩)命名空间的串联,因此,如果我们调整生成的单元名称将更改的命名空间,这是有道理的。

问题是我们需要在多个模块的一些其他配置文件中包含持久性单元名称。每次持久性单元名称更改时,我们都会有更多文件要更新。

我们希望能够在调用xjc时(在我们的maven构建中)或者在全局绑定中指定持久性单元名称。

如何指定要在生成的persistence.xml中使用的持久性单元名称?

1 个答案:

答案 0 :(得分:0)

我们还没有找到解决这个问题的真正方法。在我们这样做之前,我们正在使用以下解决方法。

在我们的pom.xml中,在生成xjc代码之后,我们进行后处理以替换生成的persistence.xml中的持久性单元名称。在此示例中,我们基于maven模块名称命名持久性单元。

  <plugin>
    <groupId>com.google.code.maven-replacer-plugin</groupId>
    <artifactId>replacer</artifactId>
    <executions>
      <execution>
        <id>Name Persistence Unit</id>
        <phase>process-resources</phase>
        <goals>
          <goal>replace</goal>
        </goals>
        <configuration>
          <includes>
            <include>${basedir}/target/generated-sources/xjc/**/persistence.xml</include>
          </includes>
          <regex>true</regex>
          <replacements>
            <replacement>
              <token>persistence-unit name=".*"</token>
              <value>persistence-unit name="${project.artifactId}"</value>
            </replacement>
          </replacements>
        </configuration>
      </execution>
    </executions>
  </plugin>