[英]Why does Hyperjaxb3 generate RestItem classes?
我正在使用maven-hyperjaxb3-plugin(0.6.1)从我的xsd文件生成域类。 除了一个类,其他所有东西都运行良好,甚至在我添加23个以上字段之前,它都可以正常工作。
一旦超出字段数量,它就会为我的名为ILT的表生成两个类:一个称为ILT.java,一个称为ILTRestItem.java,我认为这与将这些类与REST API一起使用有关(我不愿意这样做)。不打算这样做)。
ILTRestItem类具有编译错误。 它对XmlAdapterUtils.unmarshallJAXBElement进行了大量调用,错误消息是:
XmlAdapterUtils类型的方法marshallJAXBElement(Class,QName,Class,BoundType)不适用于参数(Class,QName,Class,String)
我实际上并不太担心该错误,因为我宁愿它根本不创建ILTRestItem类。 其他(较小)的类工作正常,我的目标是让ILT做同样的事情。
如果我运行jaxb2插件(maven-jaxb2-plugin)并使用它生成类,则不会生成ILTRestItem,并且这些类是正确的类,但是它们当然会缺少JPA批注。 这使我怀疑Hyperjaxb3负责生成ILTRestItem类,但是我仔细查看了源代码,希望能看到其中包含“ RestItem”之类的类,并且没有任何类。
相关的一点是,我在这里使用单表继承。 ILT类和另一个类(IFT)使用相同的基础表(Transaction),并且它们都扩展了Transaction类。 如果我将ILT与Transaction分离,并使其成为非继承类,则ILTRestItem将不再生成。
对JAXB2和HyperJaxb3都进行了很多搜索,但我找不到任何对RestItem的引用,也没有找到生成它的原因(或由它们中的哪个执行)。 我希望有一些配置开关可以关闭RestItem生成,但是到目前为止我还看不到它。
为了完整起见,我应该补充一点,我尝试切换出不同的字段,以查看其中是否是此行为的触发因素,而事实并非如此。 实际上,这似乎是字段数,或者可能是记录的总长度。
另外:JPA 2.1和相关的Maven片段是:
<plugin>
<groupId>org.jvnet.hyperjaxb3</groupId>
<artifactId>maven-hyperjaxb3-plugin</artifactId>
<version>0.6.1</version>
<dependencies>
<dependency>
<groupId>com.xyz</groupId>
<artifactId>ims-core-partner</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
<executions>
<execution>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
<configuration>
<variant>jpa2</variant>
<extension>true</extension>
<args>
<arg>-extension</arg>
<arg>-XtoString</arg>
<arg>-Xannotate</arg>
</args>
</configuration>
</plugin>
依赖关系是使用annox在该附加中获得几个自定义注释。
最后,这是我的xsd文件中的相关片段:
<complexType name="ILT">
<xsd:annotation>
<xsd:appinfo>
<hj:entity>
<orm:inheritance strategy="SINGLE_TABLE"/>
<orm:discriminator-value>ILT</orm:discriminator-value>
</hj:entity>
</xsd:appinfo>
</xsd:annotation>
<xsd:complexContent>
<xsd:extension base="tns:Transaction">
<xsd:sequence>
<element name="iltType" type="tns:ItemType">
</element>
<element name="investmentOrderId" type="string">
</element>
...
只要我的字段列表足够短,这就能完成所有工作。
有趣的是,一旦您在此处提出问题,答案将在接下来的30分钟内出现。 无论如何。 我在ILT类(生成ILTRestItem的那个)和Transaction类(继承它的一个)中定义了相同的字段,从而触发了我遇到的问题。 相当合理的是,它试图将其拆分成一个单独的表并进行联接。 当我从ILT中删除该字段时,问题就消失了。 我不确定我是如何错过了某个特定领域的原因,我认为在升级到最新版本之前我可能已经得出了这个结论。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.