XML Mapping Working with XML data Hibernate lets you work with persistent XML data in much the same way you work with persistent POJOs. A parsed XML tree can be thought of as just another way to represent the relational data at the object level. Hibernate supports dom4j as API for manipulating XML trees. You can write queries that retrieve dom4j trees from the database and have any modification you make to the tree automatically synchronized to the database. You can even take an XML document, parse it using dom4j, and write it to the database with any of Hibernate's basic operations: persist(), saveOrUpdate(), merge(), delete(), replicate() (merge is not yet supported in Hibernate 3.0rc1). This feature has many applications including data import/export, externalization of entity data via JMS or SOAP and XSLT-based reporting. An single mapping may be used to simultaneously map properties of a class and nodes of an XML document to the database, or, if there is no class to map, it may be used to map just the XML. Note that this is an experimental feature in Hibernate 3.0 and is under extremely active development. Specifying XML and class mapping together Here is an example of mapping a POJO and XML simultaneously: ... ]]> Specifying just an XML mapping Here is an example where there is no POJO class: ... ]]> This mapping will let us access the data as a dom4j tree, or as a graph of property name/value pairs (java Maps). The property names are purely logical constructs that may be referred to in HQL queries. XML mapping metadata Many Hibernate mapping elements accept the node attribute. This let's us specify the name of an XML attribute or element that holds the property or entity data. The format of the node attribute must be one of the following: "element-name" - map to the named XML element "@attribute-name" - map to the named XML attribute "." - map to the parent element "element-name/@attribute-name" - map to the named attribute of the named element For collections and single valued associations, there is an additional embed-xml attribute. If embed-xml="true", the default, the XML tree for the associated entity (or collection of value type) will be embedded directly in the XML tree for the entity that owns the association. Otherwise, if embed-xml="false", then only the referenced identifier value will appear in the XML for single point associations and collections will simply not appear at all. You should be careful not to leave embed-xml="true" for too many associations, since XMl does not deal well with circularity! ... ]]> in this case, we have decided to embed the collection of account ids, but not the actual account data. The following HQL query: Would return datasets such as this: Gavin A King ... ]]> If we set embed-xml="true" on the <one-to-many> mapping, the data might look more like this: 100.29 -2370.34 Gavin A King ... ]]> TODO: doc the EntityMode stuff