Hyperjaxb3命名策略在0.5.6和0.6.2之间变化

时间:2018-01-11 19:24:56

标签: hyperjaxb

我们有一个重要的代码库,利用Hyperjaxb3来注释使用xjc生成的Java类(以及其他xjc插件,包括本地生成的插件)。

我们正在尝试从Hyperjaxb3 0.5.6升级到0.6.2,但在这些版本之间明显的命名策略更改时遇到了一个重大问题。

具体而言,复杂类型名称(如“OneTwo”)在0.5.6中生成表名“ONETWO”,而在0.6.2中,表名称为“ONE_TWO”。列名称相同。

我们非常倾向于不重构数百个查询以适应这样的命名更改(尽管更新,更传统的SQL命名当然有意义 - 我们希望它是六年前这个项目启动时的默认行为)

有没有一种简单的方法可以切换到旧的命名策略?如果做不到这一点,您是否可以提供有关如何使用自定义命名策略扩展Hyperjaxb3的详细信息?

看了this testthis one后,我们不清楚我们需要对我们的pom做什么来指定不同的命名策略类,而Extension Guide目前空。

  <plugin>
    <groupId>org.jvnet.jaxb2.maven2</groupId>
    <artifactId>maven-jaxb2-plugin</artifactId>
    <configuration>
      <extension>true</extension>
      <plugins>
        <plugin>
          <groupId>org.jvnet.jaxb2_commons</groupId>
          <artifactId>jaxb2-basics</artifactId>
          <version>${jaxb.commons.version}</version>
        </plugin>
        <plugin>
          <groupId>org.jvnet.hyperjaxb3</groupId>
          <artifactId>hyperjaxb3-ejb-plugin</artifactId>
          <version>${hyperjaxb3.version}</version>
        </plugin>
        <plugin>
          <groupId>${project.groupId}</groupId>
          <artifactId>jaxb-x12</artifactId>
          <version>${project.version}</version>
        </plugin>
      </plugins>
      <args>
        <arg>-enableIntrospection</arg>
        <arg>-Xcopyable</arg>
        <arg>-Xequals</arg>
        <arg>-XhashCode</arg>
        <arg>-Xinheritance</arg>
        <arg>-Xhyperjaxb3-ejb</arg>
        <arg>-Xx12</arg>
      </args>
    </configuration>
  </plugin>

1 个答案:

答案 0 :(得分:1)

HJ3的作者。

看看custom-naming测试项目。它实现并配置自定义命名策略。

解决方案由两部分组成:implementation of the naming strategyconfiguration of this implementation

您的命名实现必须实现/usr/lib64/jvm/java-1.8.0-openjdk-1.8.0/jre/bin/java 接口。最简单的方法是继承export JAVA_HOME=/usr/lib64/jvm/jre-1.8.0-openjdk

要配置,您必须创建一个基本上是Spring XML配置的资源org.jvnet.hyperjaxb3.ejb.strategy.naming.Naming。在那里,定义一个名为org.jvnet.hyperjaxb3.ejb.strategy.naming.impl.DefaultNaming的bean:

/org/jvnet/hyperjaxb3/ejb/plugin/custom/applicationContext.xml

这将覆盖标准命名策略。