1

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

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

具体来说,在 0.5.6 中,像“OneTwo”这样的 complexType 名称会导致表名“ONETWO”,而在 0.6.2 中,表名是“ONE_TWO”。列名相同。

我们非常倾向于不重构数百个查询来适应这样的命名变化(尽管更新、更传统的 SQL 命名当然是有意义的——我们希望它是六年前这个项目开始时的默认行为)。

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

看过这个 testthis one后,我们并不清楚我们需要对我们的 pom 做什么来指定不同的命名策略类,并且扩展指南目前是空的。

  <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>
4

1 回答 1

1

HJ3的作者在这里。

看看这些自定义命名测试项目。它实现并配置自定义命名策略。

该解决方案由两部分组成:命名策略的实现和此实现的配置

您命名实现必须实现org.jvnet.hyperjaxb3.ejb.strategy.naming.Naming接口。最简单的方法是继承自org.jvnet.hyperjaxb3.ejb.strategy.naming.impl.DefaultNaming.

要进行配置,您必须创建一个/org/jvnet/hyperjaxb3/ejb/plugin/custom/applicationContext.xml基本上是 Spring XML 配置的资源。在那里,定义一个名为 的bean naming

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">

    <bean name="naming" class="com.acme.foo.MyNaming">
        <property name="reservedNames" ref="reservedNames"/>
    </bean>

</beans>

这将覆盖标准命名策略。

于 2018-01-13T16:54:02.907 回答