我们有一个重要的代码库,利用Hyperjaxb3来注释使用xjc生成的Java类(以及其他xjc插件,包括本地生成的插件)。
我们正在尝试从Hyperjaxb3 0.5.6升级到0.6.2,但在这些版本之间明显的命名策略更改时遇到了一个重大问题。
具体而言,复杂类型名称(如“OneTwo”)在0.5.6中生成表名“ONETWO”,而在0.6.2中,表名称为“ONE_TWO”。列名称相同。
我们非常倾向于不重构数百个查询以适应这样的命名更改(尽管更新,更传统的SQL命名当然有意义 - 我们希望它是六年前这个项目启动时的默认行为)
有没有一种简单的方法可以切换到旧的命名策略?如果做不到这一点,您是否可以提供有关如何使用自定义命名策略扩展Hyperjaxb3的详细信息?
看了this test或this 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>
答案 0 :(得分:1)
HJ3的作者。
看看custom-naming测试项目。它实现并配置自定义命名策略。
解决方案由两部分组成:implementation of the naming strategy和configuration 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
这将覆盖标准命名策略。