我正在使用maven-hyperjaxb3-plugin(0.6.1)从我的xsd文件生成域类。除了一个类以外,一切都很好,甚至可以正常工作,直到我添加了超过23个字段。为什么Hyperjaxb3生成RestItem类?
一旦我超过了这个数量的字段,它会为我的表命名为ILT生成两个类:一个称为ILT.java,另一个称为ILTRestItem.java,我假设这与使用这些类与REST API有关(我不打算这么做)。
的ILTRestItem类有编译错误。它做了很多呼叫XmlAdapterUtils.unmarshallJAXBElement和错误消息的是:
方法marshallJAXBElement(类,的QName,类, BoundType)在类型XmlAdapterUtils是不适用于 参数(类,的QName ,类,字符串)
我实际上并不太担心这个错误,因为我宁愿它根本没有创建ILTRestItem类。其他(较小的)班级正常工作,我的目标是让ILT做同样的事情。
如果我运行jaxb2插件(maven-jaxb2-plugin)并使用它来生成类,则不会生成ILTRestItem,并且这些类是正确的,但它们当然缺少JPA注释。这导致我怀疑Hyperjaxb3负责生成ILTRestItem类,但是我查看了希望通过源代码查看类似'RestItem'的类,并且没有任何类。
一个相关的一点是,我在这里使用单表继承。 ILT类和另一个类(IFT)使用相同的基础表(Transaction),它们都扩展了Transaction类。如果我从事务中分离ILT并将其设置为非继承类,则ILTRestItem不再生成。
很多都JAXB2和HyperJaxb3,我没有找到任何引用RestItem或只是它为什么产生(或他们的做它)的搜索。我希望有一些配置开关关闭RestItem代,但到目前为止我看不到它。
为了完整,我应该补充一下,我尝试将不同的字段切换出来,看看它们中的一个是否是这种行为的触发器,而事实并非如此。它看起来好像是字段的数量,或者可能是记录的总长度。
另外:JPA 2.1及相关行家片段是:
<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>
...
这确实所有的工作,只要我的字段列表足够短。