我正在尝试使用hyperjaxb3从三个.xsd(C14054.xsd,C14054CodeLists.xsd& C14054DataTypes.xsd)exec***
创建一个关系模式,然后编组来自XML< - >的数据。 Java< - >关系。
hyperjaxb3已经比我评估的非常昂贵的商业工具在创建关系模式方面做得更好 - 但我无法通过Enums做到我想做的事情。
e.g。在C14054.xsd中,'提供商'元素参考' RECID'
<xs:element name="Provider">
<xs:complexType>
<xs:sequence>
<xs:element ref="RECID" minOccurs="1" maxOccurs="1" />
又是TYPE&#39; RECIDCodeType&#39;
<xs:element name="RECID" type="RECIDCodeType" />
来自C14054CodeLists.xsd
<xs:complexType name="RECIDCodeType">
<xs:simpleContent>
<xs:extension base="RECIDCodeContentType" />
</xs:simpleContent>
扩展了RECIDCodeContentType
<xs:simpleType name="RECIDCodeContentType">
<xs:restriction base="xs:string">
<xs:enumeration value="14054">
<xs:annotation>
<xs:documentation>
<Label>2014/15 AP student record</Label>
</xs:documentation>
</xs:annotation>
</xs:enumeration>
</xs:restriction>
即。可以唯一有效的条目(在数据库层)到Provider.RECID(我在bindings.xjb中更改了列名)是&#39; 14054&#39;?
即。可以将14054作为一行添加到数据库中的Subpurposecodetype.VALUE_列吗?
非常感谢任何人都能摆脱的任何光明!
答案 0 :(得分:0)
希望这将有助于其他人(感谢lexicore指出我正确的方向!):
内联解决方案:
<xs:simpleType name="RECIDCodeContentType">
<xs:annotation>
<xs:appinfo>
<hj:id />
</xs:appinfo>
</xs:annotation>
<xs:restriction base="xs:string">
<xs:enumeration value="14054">
<xs:annotation>
<xs:documentation>
<Label>2014/15 AP student record</Label>
</xs:documentation>
</xs:annotation>
</xs:enumeration>
</xs:restriction>
外部绑定文件解决方案:
<jaxb:bindings schemaLocation="C14054CodeLists.xsd" node="/xs:schema">
<!-- RECIDCodeType : Make VALUE Primary Key -->
<jaxb:bindings node="xs:simpleType[@name='RECIDCodeContentType']">
<hj:id />
</jaxb:bindings>
</jaxb:bindings>
结果:
@Id
@Column(name = "VALUE_")
public String getValue() {
return value;
}