Сопоставление типов XML в JPA (EclipseLink / Oracle Toplink)

По словам Джеймса и Томаса Отображение Oracle XMLType на JPA (EclipseLink), Поля XMLType обрабатываются (отображаются и сохраняются) с помощью @Customizer и DescriptorCustomizer.

У меня мало сомнений в этом подходе.

  1. Почему атрибут xmlField не требует аннотации @Column?
  2. Почему мы используем DescriptorCustomizer для сопоставления xmlField? Это только для отображения полей? Или это поле тоже может сохраняться?
  3. DirectToXMLTypeMapping можно использовать для типа объекта? (См.: http://docs.oracle.com/cd/E15051_01/web.1111/b32441/relmapun.htm#CHDFIFEF)
  4. Что касается сообщения Томаса, как это xmlField будет сохраняться? Нужно написать методы обратного вызова?

Прошу уточнить меня. Извините, если мой вопрос не имеет смысла. Предоставьте несколько ссылок и документацию, чтобы понять отображение полей XMLType в JPA (EclipseLink / Oracle Toplink).


person Mohan Raj    schedule 25.09.2013    source источник


Ответы (1)


XMLType - это специализированный тип поля Oracle, и я предполагаю, что он не работает с простым базовым сопоставлением JPA. EclipseLink имеет настраиваемый тип DirectToXMLTypeMapping, который может обрабатывать преобразования Oracle XMLType в / из java String. В опубликованном вами примере настройщик сначала удаляет существующее сопоставление, которое создается с помощью аннотаций для атрибута «xmlField». Это по существу стирает любую информацию @Column, которая могла быть добавлена. Затем он добавляет новый DirectToXMLTypeMapping, содержащий всю информацию, необходимую для поля, поэтому нет необходимости использовать аннотации для атрибута.

В качестве альтернативы вы можете определить аннотацию @Column и любые другие параметры, и вместо простого удаления сопоставления вы можете получить объект DatabaseMapping из дескриптора и извлечь из него имя столбца и другие значения для заполнения нового DirectToXMLTypeMapping.

Сопоставление - это то, что описывает, как атрибут в вашей сущности соотносится с полем базы данных. Таким образом, он должен обрабатывать извлечение, а также вставки / обновления, преобразовывая его в / из типа java в / из типа базы данных. В опубликованной вами ссылке сопоставление атрибута xmlType объекта преобразует строку Java в Oracle XMLType при сохранении и меняет ее местами при обратном чтении из БД.

person Chris    schedule 25.09.2013