2015-10-27 4 views
0

У меня есть файл XSD, который включает в себя элемент с перечислением ограничений:Hyperjaxb3: Создание таблицы поиска из перечисления элементов

<xs:complexType name="Request"> 
    <xs:sequence> 
     <xs:element name="CommsAddress" type="xs:string" /> 
     <xs:element name="CommsAddressType"> 
      <xs:simpleType> 
       <xs:restriction base="xs:string"> 
        <xs:enumeration value="EMAIL"/> 
        <xs:enumeration value="PHONE"/> 
       </xs:restriction> 
      </xs:simpleType> 
     </xs:element> 
     ... 

Я хотел бы CommsAddressType поля в созданном классе Java, чтобы быть порожденным перечислением с значения EMAIL и PHONE. В свою очередь, я хотел бы, чтобы Hibernate автоматически генерировал мою схему базы данных с таблицей CommsAddressType, содержащей две строки со значениями EMAIL и PHONE. Таблица Request может просто ссылаться на них с помощью столбца CommsAddressTypeId.

В настоящее время Hyperjaxb3 генерирует мой Request класс с CommsAddressType полем типа String:

@XmlElement(name="CommsAddressType") 
protected String commsAddressType 

и схема создается таким образом, что Request таблица имеет CommsAddressType столбец типа VARCHAR. Это, очевидно, приведет к большому количеству ненужных дублированных данных.

Есть ли способ достичь того, что я описал выше? Кроме того, поскольку я подвергаю xsd моему клиенту, я хотел бы избежать включения любых ярлыков jaxb или hyperjaxb в схему, если это возможно.

ответ

0

Отказ от ответственности: Я являюсь автором Hyperjaxb.

Если вы перечислили типы перечислений в Java, Hyperjaxb будет обрабатывать их как перечисления, а не как строки. Для этого вы можете, например, настроить простой тип с:

<jaxb:typesafeEnumClass/> 

Смотрите эту example.

Hyperjaxb будет отображать соответствующие свойства как @Enumerated.

Нет, вы не можете создать таблицу поиска, но вы можете настроить способ отображения перечисления в базе данных. Например, вы можете сделать это отображается в EnumType.ORDINAL:

<hj:basic><orm:enumerated>ORDINAL</orm:enumerated></hj:basic> 

Example.

На самом деле, с перечислениями вам действительно не нужны таблицы поиска для JPA. JPA правильно отображает перечисления в соответствии с отображаемым отображением EnumType.

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

В этом случае я бы рекомендовал отображать перечисление как ORDINAL и добавить таблицу поиска и соответствующие внешние ключи на свои собственные DDL-скрипты.

И да, вы можете выполнить все описанные настройки в отдельном файле привязок (обычно bindings.xjb), вам не нужно делать это непосредственно в схеме. См. Тестовые проекты here, есть много примеров. Просто найдите *.xjb файлов в каталогах src/main/resources.

Смежные вопросы