1

我正在尝试使用 hyperjaxb3 从此处可用的三个 .xsd(C14054.xsd、C14054CodeLists.xsd 和 C14054DataTypes.xsd)创建关系模式,然后从 XML <-> Java <-> Relational 编组数据。

与我评估过的非常昂贵的商业工具相比,hyperjaxb3 在创建关系模式方面已经做得更好——但我不能完全让它用 Enums 做我想做的事情。

例如,在 C14054.xsd 中,“Provider”元素引用“RECID”

<xs:element name="Provider">
<xs:complexType>
  <xs:sequence>
    <xs:element ref="RECID" minOccurs="1" maxOccurs="1" />

这又是 TYPE 'RECIDCodeType'

<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>

  1. 枚举类型在数据库中创建为具有“HJID”和“VALUE_”列的“查找表”。表的主键是否可以是 VALUE_,而不是自动编号 HJID?

即,Provider.RECID(我更改了 bindings.xjb 中的列名)的唯一有效条目(在数据库层)可以是“14054”吗?

  1. 创建模式时,枚举值是否可以持久保存到关系表中?

即可以将 14054 作为一行添加到数据库中的 Sub purposecodetype.VALUE_ 列中吗?

非常感谢任何人都可以散发的光芒!

4

1 回答 1

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;
}
于 2015-07-23T14:02:06.557 回答