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>
- Перечислимые типы создаются в базе данных как "справочные таблицы" со столбцами "HJID" и "VALUE_". Возможно ли, чтобы первичный ключ таблицы был VALUE_, а не автонумера HJID?
Т.е. единственной допустимой записью (на уровне базы данных) в Provider.RECID (я изменил имя столбца в bindings.xjb) будет "14054"?
- Можно ли сохранить значения 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;
}