我使用maven-hyperjaxb3-plugin(0.6.1)从我的xsd文件生成域类。除了一个类之外,一切都很好,甚至可以正常工作,直到我添加超过23个字段为止。
一旦我超过了那个数量的字段,它就会为我的名为ILT的表生成两个类:一个名为ILT.java,一个名为ILTRestItem.java,我假设这与使用REST API的这些类有关(我不打算做的事情。)
ILTRestItem类有编译错误。它对XmlAdapterUtils.unmarshallJAXBElement进行了大量调用,错误信息是:
方法marshallJAXBElement(Class,QName,Class, XmlAdapterUtils类型中的BoundType)不适用于 参数(Class,QName,Class,String)
我实际上并不太担心这个错误,因为我宁愿它根本没有创建ILTRestItem类。其他(较小的)类工作正常,我的目标是让ILT做同样的事情。
如果我运行jaxb2插件(maven-jaxb2-plugin)并使用它来生成类,则没有生成ILTRestItem且类是正确的,但它们当然缺少JPA注释。这让我怀疑Hyperjaxb3负责生成ILTRestItem类,但是我已经查看了源代码,希望看到类似于' RestItem'在他们身上并且没有。
一个相关点是我在这里使用单表继承。 ILT类和另一个类(IFT)使用相同的基础表(Transaction),它们都扩展了Transaction类。如果我从Transaction中分离ILT并使其成为非继承类,则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>
...
只要我的字段列表足够短,这一切都有效。
答案 0 :(得分:0)
有趣的是,一旦你在这里提出问题,答案会在接下来的30分钟内出现。无论如何。我遇到的问题是由我在ILT类(生成ILTRestItem的那个)和Transaction类(它继承自的类)中定义了相同的字段。相当合理的是,它试图将其拆分为一个单独的表并进行连接。当我从ILT中删除该字段时,问题就消失了。我不确定我是如何错过它是由某个特定领域造成的,我想在升级到最新版本之前我可能已经得出了这个结论。