注意这是Hibernate 3.0的一个实验性的特性。这一特性仍在积极开发中。
Hibernate使得你可以用XML数据来进行工作,恰如你用持久化的POJO进行工作那样。解析过的XML树 可以被认为是代替POJO的另外一种在对象层面上表示关系型数据的途径.
Hibernate支持采用dom4j作为操作XML树的API。你可以写一些查询从数据库中检索出
dom4j树,随后你对这颗树做的任何修改都将自动同步回数据库。你甚至可以用dom4j解析
一篇XML文档,然后使用Hibernate的任一基本操作将它写入数据库:
persist(), saveOrUpdate(), merge(), delete(), replicate()
(合并操作merge()目前还不支持)。
这一特性可以应用在很多场合,包括数据导入导出,通过JMS或SOAP具体化实体数据以及 基于XSLT的报表。
一个单一的映射就可以将类的属性和XML文档的节点同时映射到数据库。如果不需要映射类, 它也可以用来只映射XML文档。
这是一个同时映射POJO和XML的例子:
<class name="Account" table="ACCOUNTS" node="account"> <id name="accountId" column="ACCOUNT_ID" node="@id"/> <many-to-one name="customer" column="CUSTOMER_ID" node="customer/@id" embed-xml="false"/> <property name="balance" column="BALANCE" node="balance"/> ... </class>
这是一个不映射POJO的例子:
<class entity-name="Account" table="ACCOUNTS" node="account"> <id name="id" column="ACCOUNT_ID" node="@id" type="string"/> <many-to-one name="customerId" column="CUSTOMER_ID" node="customer/@id" embed-xml="false" entity-name="Customer"/> <property name="balance" column="BALANCE" node="balance" type="big_decimal"/> ... </class>
这个映射使得你既可以把数据作为一棵dom4j树那样访问,又可以作为由属性键值对(java Map
s)
组成的图那样访问。属性名字纯粹是逻辑上的结构,你可以在HQL查询中引用它。