📄 xml.html
字号:
<html><head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>第 19 章 XML映射</title><link rel="stylesheet" href="../shared/css/html.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.65.1"><link rel="home" href="index.html" title="HIBERNATE - 符合Java习惯的关系数据库持久化"><link rel="up" href="index.html" title="HIBERNATE - 符合Java习惯的关系数据库持久化"><link rel="previous" href="filters.html" title="第 18 章 过滤数据"><link rel="next" href="performance.html" title="第 20 章 提升性能
 "></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">第 19 章 XML映射</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="filters.html">上一页</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="performance.html">下一页</a></td></tr></table><hr></div><div class="chapter" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title"><a name="xml"></a>第 19 章 XML映射</h2></div></div><div></div></div><p><span class="emphasis"><em> 注意这是Hibernate 3.0的一个实验性的特性。这一特性仍在积极开发中。 </em></span></p><div class="sect1" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="xml-intro"></a>19.1. 用XML数据进行工作</h2></div></div><div></div></div><p> Hibernate使得你可以用XML数据来进行工作,恰如你用持久化的POJO进行工作那样。解析过的XML树 可以被认为是另外一种在对象层面上代替POJO来表示关系型数据的途径. </p><p> Hibernate支持采用dom4j作为操作XML树的API。你可以写一个查询从数据库中检索出 dom4j树,随后你对这颗树做的任何修改都将自动同步回数据库。你甚至可以用dom4j解析 一篇XML文档,然后使用Hibernate的任一基本操作将它写入数据库: <tt class="literal">persist(), saveOrUpdate(), merge(), delete(), replicate()</tt> (合并操作merge()目前还不支持)。 </p><p> 这一特性可以应用在很多场合,包括数据导入导出,通过JMS或SOAP表现实体数据以及 基于XSLT的报表。 </p><p> 一个单一的映射就可以将类的属性和XML文档的节点同时映射到数据库。如果不需要映射类, 它也可以用来只映射XML文档。 </p><div class="sect2" lang="zh-cn"><div class="titlepage"><div><div><h3 class="title"><a name="xml-intro-mapping"></a>19.1.1. 指定同时映射XML和类</h3></div></div><div></div></div><p> 这是一个同时映射POJO和XML的例子: </p><pre class="programlisting"><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></pre></div><div class="sect2" lang="zh-cn"><div class="titlepage"><div><div><h3 class="title"><a name="xml-onlyxml"></a>19.1.2. 只定义XML映射</h3></div></div><div></div></div><p> 这是一个不映射POJO的例子: </p><pre class="programlisting"><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></pre><p> 这个映射使得你既可以把数据作为一棵dom4j树那样访问,又可以作为由属性键值对(java <tt class="literal">Map</tt>s) 组成的图那样访问。属性名字是纯粹逻辑上的结构,你可以在HQL查询中引用它。 </p></div></div><div class="sect1" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="xml-mapping"></a>19.2. XML映射元数据</h2></div></div><div></div></div><p> 许多Hibernate映射元素具有<tt class="literal">node</tt>属性。这使你可以指定用来保存 属性或实体数据的XML属性或元素。<tt class="literal">node</tt>属性必须是下列格式之一: </p><div class="itemizedlist"><ul type="disc" compact><li><p><tt class="literal">"element-name"</tt> - 映射为指定的XML元素</p></li><li><p><tt class="literal">"@attribute-name"</tt> - 映射为指定的XML属性</p></li><li><p><tt class="literal">"."</tt> - 映射为父元素</p></li><li><p> <tt class="literal">"element-name/@attribute-name"</tt> - 映射为指定元素的指定属性 </p></li></ul></div><p> 对于集合和单值的关联,有一个额外的<tt class="literal">embed-xml</tt>属性可用。 这个属性的缺省值是真(<tt class="literal">embed-xml="true"</tt>)。如果<tt class="literal">embed-xml="true"</tt>, 则对应于被关联实体或值类型的集合的XML树将直接嵌入拥有这些关联的实体的XML树中。 否则,如果<tt class="literal">embed-xml="false"</tt>,那么对于单值的关联,仅被引用的实体的标识符出现在 XML树中(被引用实体本身不出现),而集合则根本不出现。 </p><p> 你应该小心,不要让太多关联的embed-xml属性为真(<tt class="literal">embed-xml="true"</tt>),因为XML不能很好地处理 循环引用! </p><pre class="programlisting"><class name="Customer" table="CUSTOMER" node="customer"> <id name="id" column="CUST_ID" node="@id"/> <map name="accounts" node="."
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -