hyperjaxb3: вопросы перечисления

Я пытаюсь использовать hyperjaxb3 для создания реляционной схемы из трех.xsd (C14054.xsd, C14054CodeLists.xsd & C14054DataTypes.xsd), доступных здесь, а затем собирать данные из XML <-> Java <-> реляционного.

hyperjaxb3 уже проделал лучшую работу по созданию реляционной схемы, чем очень дорогой коммерческий инструмент, который я оценил, - но я не могу заставить его делать то, что я хочу с Enums.

например, в C14054.xsd элемент 'Provider' ссылается на 'RECID'

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

который в свою очередь имеет тип "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. Можно ли сохранить значения Enum в таблицах отношений при создании схемы?

Т.е. можно ли добавить 14054 как строку в столбец Subpurposecodetype.VALUE_ в базе данных?

Большое спасибо за любой свет, который может пролить любой!

1 ответ

Решение

Надеюсь, это поможет другим людям в будущем (спасибо 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;
}
Другие вопросы по тегам