Mapeo XML Nota que esta es una funcionalidad experimental en Hibernate 3.0 y está bajo un desarrollo extremadamente activo. Trabajando con datos XML Hibernate te permite trabajar con datos XML persistentes en casi la misma forma que trabajas con POJOs persistentes. Un árbol XML analizado (parsed) puede ser pensado como sólo otra forma de representar los datos relacionales a nivel de objetos, en vez de POJOs. Hibernate soporta dom4j como API para manipular árboles XML. Puedes escribir consultas que traigan árboles dom4j de la base de datos y tener cualquier modificación que hagas al árbol sincronizada automáticamente a la base de datos. Puedes incluso tomar un documento XML, analizarlo usando dom4j, y escribirlo a la base de datos con cualquiera de las operaciones básicas de Hibernate: persist(), saveOrUpdate(), merge(), delete(), replicate() (la fusión no está aún soportada). Esta funcionalidad tiene muchas aplicaciones incluyendo la importación/exportación de datos, externalización de datos de entidad vía JMS o SOAP y reportes basados en XSLT. Un solo mapeo puede ser usado para mapear simultáneamente las propiedades de una clase y los nodos de un documento XML a la base de datos, o, si no hay ninguna clase a mapear, puede ser usado para mapear sólo el XML. Especificando los mapeos de XML y de clase juntos He aquí un ejemplo de mapear un POJO y XML simultáneamente: ... ]]> Especificando sólo un mapeo XML He aquí un ejemplo donde no hay ninguna clase POJO: ... ]]> Este mapeo te permite acceder a los datos como un árbol dom4j, o como un grafo de pares nombre/valor de propiedad (Maps de Java). Los nombres de propiedades son construcciones puramente lógicas a las que se puede hacer referencia en consultas HQL. Mapeo de metadatos XML Muchos elementos de mapeo de Hibernate aceptan el atributo node. Esto te permite espcificar el nombre de un atributo o elemento XML que contenga los datos de la propiedad o entidad. El formato del atributo node debe ser uno de los siguientes: "element-name" - mapea al elemento XML mencionado "@attribute-name" - mapea al atributo XML mencionado "." - mapea al elemento padre "element-name/@attribute-name" - mapea al atributo mencionado del elemento mencionado Para las colecciones y asociaciones monovaluadas, existe un atributo adicional embed-xml. Si embed-xml="true", que es el valor por defecto, el árbol XML para la entidad asociada (o colección de tipo de valor) será embebida directamente en el árbol XML para la entidad que posee la asociación. En otro caso, si embed-xml="false", sólo el valor identificador referenciado aparecerá en el XML para asociaciones de punto único y para las colecciones simplemente no aparecerá en absoluto. ¡Debes ser cuidadoso de no dejar embed-xml="true" para demasiadas asociaciones, ya que XML no trata bien la circularidad! ... ]]> en este caso, hemos decidido embeber la colección de ids de cuenta, pero no los datos reales de cuenta. La siguiente consulta HQL: devolvería conjuntos de datos como estos: 987632567 985612323 Gavin A King ... ]]> Si estableces embed-xml="true" en el mapeo <one-to-many>, los datos podrían verse así: 100.29 -2370.34 Gavin A King ... ]]> Manipulando datos XML Vamos a releer y actualizar documentos XML en la aplicación. Hacemos esto obteniendo una sesión dom4j: Es extremadamente útil combinar esta funcionalidad con la operación replicate() de Hibernate para implementar la importación/exportación de datos basada en XML.