Java: XML в базу данных, какой самый простой способ? - PullRequest
11 голосов
/ 22 ноября 2010

У меня есть загрузка файлов XML и XSD для них.

Я бы хотел просто преобразовать их в POJO и вставить их в базу данных. Схема БД находится под моим контролем, поэтому она может быть любой, что мне нравится.

Я посмотрел вокруг на загрузку apis, но хотел другое мнение, что работает лучше всего.

  • JAXB?
  • XMLBeans
  • XPATH к DBUnit?

Есть ли у hibernate некоторые API для создания POJO из XSD, затем читать XML в эти POJO и затем вставлять данные в базу данных?

Или у Spring есть какие-то функции, чтобы помочь с этим?

Я полагаю, что я только после ваших просмотров, просто есть API, который я пропустил, который поможет сделать то, что я хочу.

Спасибо Джефф Портер

Ответы [ 3 ]

3 голосов
/ 22 ноября 2010

Или вы можете обойти этап перевода в POJO и сохранить XML непосредственно в виде CLOB.Позже он разрешит «утку», что может оказаться полезным.

Отображение в Java POJO имеет смысл, если позже вам потребуется запросить эти объекты по отдельности.Если вам нужен весь поток все время, без необходимости запрашивать значения в XML (например, XPath), то я бы сказал, что хранение XML как CLOB имеет больше смысла.

2 голосов
/ 22 ноября 2010

Быстрый ответ: JAXB, JPA и Spring

При вставке XML в базу данных необходимо учитывать, какие операции вы хотели бы выполнить с данными, которые представляет XML.

Вы можете, например, считать XML входными данными, а затем создать схему, в которой эти данные будут легко запрашиваться.Если это то, что вы хотели бы сделать, тогда используйте JAXB в качестве демаршаллера, потому что вы можете легко генерировать подходящие аннотированные pojos / entity из XSD с помощью инструмента xjc.Немного дополнительной аннотации JPA, и вы получите быстрое решение, которое отображает XML в полную схему, которая позволяет выполнять различные запросы и альтернативные представления.Конечно, аннотации JAXB могут использоваться для генерации большого количества выходных форматов (XML, JSON, YAML и т. Д.), Поэтому вы не ограничены XML, когда хотите вывести эти данные.

Далее, вы можете рассматривать XML как целостную сущность, которую вы хотите сохранить.В этом случае вы хотите сохранить его как CLOB или как XML (в Oracle). Oracle, безусловно, поддерживает поиск на основе XPath, так что вы получите хорошую возможность для запроса результирующего набора данных.

Наконец, если вы думаете, что XML слишком раздут, и вы вКонтроль любых результирующих изменений в pojos вы можете сериализовать unmarshalled pojos непосредственно в базу данных как BLOB.У вас будет довольно компактная схема и база данных, но вы будете страдать, когда дело доходит до запросов, поскольку все они будут двоичными.И позже у вас возникнут проблемы совместимости двоичных версий, если вам придется десериализовать очень старый набор данных, основанный на старых pojos.

Итак, подведем итог: JAXB - очень хороший способ обработки процессов демаршаллинга и последующих маршаллинга.,Это быстро и просто и (кивок @ Blaise Doughan здесь) очень хорошо поддерживается на SO с одной стороны.JPA - это технология выбора для выполнения операций с вашей базой данных.Hibernate является одним из разработчиков JPA (с хорошими расширениями), и Spring прекрасно поддерживает его с помощью HibernateTemplate.Точно так же вы можете использовать Spring JpaTemplate, у которого, возможно, немного меньшая кривая обучения.

0 голосов
/ 22 ноября 2010

Общепринятым подходом является использование JPA (то есть EclipseLink или Hibernate) для хранения объектов в базе данных, и JAXB (то есть Metro, EclipseLink MOXy (я являюсь технический лидер) или JaxMe) для преобразования объектов в XML.

EclipseLink JAXB (MOXy) имеет ряд расширений для отображения сущностей JPA в XML:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...