hyperjaxb3:枚举问题

时间:2015-07-20 14:56:06

标签: java xml xsd jaxb hyperjaxb

我正在尝试使用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>

  1. 枚举类型在数据库中创建为&#39;查找表&#39;用列&#39; HJID&#39;和&#39; VALUE _&#39;。表的主键是否可以是VALUE_,而不是自动编号HJID?
  2. 即。可以唯一有效的条目(在数据库层)到Provider.RECID(我在bindings.xjb中更改了列名)是&#39; 14054&#39;?

    1. 在创建架构时,是否可以将Enum值持久保存到关系表中?
    2. 即。可以将14054作为一行添加到数据库中的Subpurposecodetype.VALUE_列吗?

      非常感谢任何人都能摆脱的任何光明!

1 个答案:

答案 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;
}