2010-11-22 11 views
11

Tengo una carga de archivos XML y un XSD para ellos.Java: XML en una base de datos, ¿cuál es la forma más simple?

Me gustaría simplemente convertirlo en POJO e insertarlo en una base de datos. El esquema DB está bajo mi control, por lo que puede ser lo que siempre me gusta.

He mirado a mi alrededor con un montón de apis, pero quería otra opinión que funcionaba mejor.

  • JAXB?
  • XMlBeans?
  • XPATH a DBUnit?

¿Hibernate tiene alguna API para crear POJO de un XSD, luego lee el XML en esos POJO y luego inserta los datos en la base de datos?

¿O la primavera tiene alguna característica para ayudar con esto?

Supongo que estoy detrás de sus puntos de vista, solo en caso de que haya una API que he omitido que ayudará a hacer lo que quiero.

Gracias Jeff Porter

+0

¿Puedes elegir tu base de datos? Si es así, podría considerar exist-db, que es una popular base de datos XML de código abierto. – JasonPlutext

Respuesta

3

O usted podría omitir el paso de traducir en POJOs y almacenar el XML directamente como un CLOB. Permitirá "tipar pato" más tarde, lo que puede resultar ventajoso.

Asignación a Java Los POJO tienen sentido si necesita consultar esos objetos individualmente más adelante. Si necesita todo el flujo, todo el tiempo, sin tener que consultar valores en el XML (por ejemplo, XPath), diría que almacenar XML como un CLOB tiene más sentido.

+0

+1: Haría esto, además de extraer los campos seleccionados y almacenarlos como columnas _indexed_ adicionales para poder hacer búsquedas de alta velocidad más adelante. Los campos correctos para extraer dependerán de los tipos de consultas que se desearán, por supuesto. –

2

respuesta rápida: JAXB, JPA y primavera

Al insertar XML en una base de datos debe tener en cuenta qué operaciones desea realizar en los datos que el XML está representando.

Podría considerar, por ejemplo, el XML como datos de entrada y luego crear un esquema que contenga los datos de una manera fácil de consultar. Si eso es lo que le gustaría hacer, utilice JAXB como el unmarshaller porque puede generar fácilmente pojos/entidades anotadas adecuadamente desde el XSD a través de la herramienta xjc. Un poco de anotación JPA adicional y tendrás una solución rápida que correlaciona el XML con un esquema completo que permite una variedad de consultas de mezcla y coincidencia y vistas alternativas. Por supuesto, las anotaciones JAXB se pueden usar para generar una amplia variedad de formatos de salida (XML, JSON, YAML, etc.), por lo que no está limitado a XML cuando desea generar estos datos.

A continuación, podría considerar el XML como la entidad completa que desea almacenar. En ese caso, desea almacenarlo como CLOB o como XML (en Oracle).Oracle certainly supports búsquedas basadas en XPath para que tenga una buena oportunidad para consultar el conjunto de datos resultante.

Finalmente, si estás pensando que XML está demasiado saturado, y tienes el control de los cambios resultantes en los pojos, puedes serializar los pojos no etiquetados directamente en la base de datos como BLOB. Tendrás un esquema y una base de datos bastante compactos, pero sufrirás cuando se trate de consultas, ya que todo será binario. Y tendrá problemas de compatibilidad de versión binaria más adelante si tiene que deserializar un conjunto de datos muy antiguo basado en viejos pojos.

Por lo tanto, para resumir, JAXB es una muy buena forma de manejar los procesos de desasignación y clasificación posterior. Es simple y rápido (asintiendo con la cabeza a @Blaise Doughan aquí) muy bien soportado en SO por una cosa. JPA es la tecnología de elección para realizar sus operaciones de base de datos. Hibernate es uno de los implementadores de JPA (con buenas extensiones), y Spring lo admite maravillosamente a través de HibernateTemplate. Igualmente, puede usar Spring's JpaTemplate, que tiene, tal vez, una curva de aprendizaje ligeramente menos profunda.

Cuestiones relacionadas