﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-一杯清茶-随笔分类-Hibernate</title><link>http://www.blogjava.net/huyi0616/category/28655.html</link><description /><language>zh-cn</language><lastBuildDate>Tue, 29 Dec 2009 17:23:40 GMT</lastBuildDate><pubDate>Tue, 29 Dec 2009 17:23:40 GMT</pubDate><ttl>60</ttl><item><title>hibernate中inverse的用法</title><link>http://www.blogjava.net/huyi0616/archive/2009/12/18/306563.html</link><dc:creator>一杯清茶</dc:creator><author>一杯清茶</author><pubDate>Fri, 18 Dec 2009 07:17:00 GMT</pubDate><guid>http://www.blogjava.net/huyi0616/archive/2009/12/18/306563.html</guid><wfw:comment>http://www.blogjava.net/huyi0616/comments/306563.html</wfw:comment><comments>http://www.blogjava.net/huyi0616/archive/2009/12/18/306563.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/huyi0616/comments/commentRss/306563.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/huyi0616/services/trackbacks/306563.html</trackback:ping><description><![CDATA[<p>转自:http://blog.csdn.net/leader_lx/archive/2008/08/06/2774137.aspx<br />
<br />
一、Inverse是hibernate双向关系中的基本概念。inverse的真正作用就是指定由哪一方来维护之间的关联关系。当一方中指定了&#8220;inverse=false&#8221;（默认），那么那一方就有责任负责之间的关联关系，说白了就是<font color="#ff0000"><strong>hibernate如何生成Sql来维护关联的记录</strong></font>！&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Hibernate仅仅按照主控方对象的状态的变化来同步更新数据库。按照原来的映射文件，people.getAddresses().add(address)，即主控方对象的状态发生了改变，因此数据库会跟着对象状态的变化来同步更新数据库；而address.setPeople(people)，即被控方对象的状态发生了改变，它是不能触发对象和数据库的同步更新的。</p>
<p>&nbsp;</p>
<p><strong style="font-size: 12pt">（实例1）：</strong></p>
<p>举个最简单的一对多父子关系。那么代码就写成：</p>
<p>父亲中的关系映射<br />
</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img id="Codehighlighter1_0_47_Open_Image" onclick="this.style.display='none'; Codehighlighter1_0_47_Open_Text.style.display='none'; Codehighlighter1_0_47_Closed_Image.style.display='inline'; Codehighlighter1_0_47_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_0_47_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_0_47_Closed_Text.style.display='none'; Codehighlighter1_0_47_Open_Image.style.display='inline'; Codehighlighter1_0_47_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /><span id="Codehighlighter1_0_47_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_0_47_Open_Text"><span style="color: #000000">{set&nbsp;name</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">children</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;lazy</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">true</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;inverse</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">true</span><span style="color: #000000">"</span><span style="color: #000000">}</span></span><span style="color: #000000"><br />
<img id="Codehighlighter1_55_79_Open_Image" onclick="this.style.display='none'; Codehighlighter1_55_79_Open_Text.style.display='none'; Codehighlighter1_55_79_Closed_Image.style.display='inline'; Codehighlighter1_55_79_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_55_79_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_55_79_Closed_Text.style.display='none'; Codehighlighter1_55_79_Open_Image.style.display='inline'; Codehighlighter1_55_79_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_55_79_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_55_79_Open_Text"><span style="color: #000000">{key&nbsp;column</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">parent_id</span><span style="color: #000000">"</span><span style="color: #000000">/</span><span style="color: #000000">}</span></span><span style="color: #000000"><br />
<img id="Codehighlighter1_87_119_Open_Image" onclick="this.style.display='none'; Codehighlighter1_87_119_Open_Text.style.display='none'; Codehighlighter1_87_119_Closed_Image.style.display='inline'; Codehighlighter1_87_119_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_87_119_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_87_119_Closed_Text.style.display='none'; Codehighlighter1_87_119_Open_Image.style.display='inline'; Codehighlighter1_87_119_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_87_119_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_87_119_Open_Text"><span style="color: #000000">{one</span><span style="color: #000000">-</span><span style="color: #000000">to</span><span style="color: #000000">-</span><span style="color: #000000">many&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">test.Child</span><span style="color: #000000">"</span><span style="color: #000000">/</span><span style="color: #000000">}</span></span><span style="color: #000000"><br />
<img id="Codehighlighter1_121_126_Open_Image" onclick="this.style.display='none'; Codehighlighter1_121_126_Open_Text.style.display='none'; Codehighlighter1_121_126_Closed_Image.style.display='inline'; Codehighlighter1_121_126_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_121_126_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_121_126_Closed_Text.style.display='none'; Codehighlighter1_121_126_Open_Image.style.display='inline'; Codehighlighter1_121_126_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span id="Codehighlighter1_121_126_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_121_126_Open_Text"><span style="color: #000000">{</span><span style="color: #000000">/</span><span style="color: #000000">set}</span></span></div>
<p>&nbsp;</p>
<p>儿子中关系映射<br />
</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img id="Codehighlighter1_0_62_Open_Image" onclick="this.style.display='none'; Codehighlighter1_0_62_Open_Text.style.display='none'; Codehighlighter1_0_62_Closed_Image.style.display='inline'; Codehighlighter1_0_62_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_0_62_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_0_62_Closed_Text.style.display='none'; Codehighlighter1_0_62_Open_Image.style.display='inline'; Codehighlighter1_0_62_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /><span id="Codehighlighter1_0_62_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_0_62_Open_Text"><span style="color: #000000">{many</span><span style="color: #000000">-</span><span style="color: #000000">to</span><span style="color: #000000">-</span><span style="color: #000000">one&nbsp;name</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">parent</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;column</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">parent_id</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;not</span><span style="color: #000000">-</span><span style="color: #0000ff">null</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">true</span><span style="color: #000000">"</span><span style="color: #000000">/</span><span style="color: #000000">}</span></span></div>
<p>&nbsp;</p>
<p><br />
&nbsp;</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">Parent&nbsp;p&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Parent();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />Child&nbsp;c&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Child();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />c.setParent(p);&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">维护父子之间关系</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">p.getChildren().add(c);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />session.save(p);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />session.flush();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<p>&nbsp;</p>
<p><font color="#ff0000">注意：{many-to-one}总是设成&#8220;inverse=false&#8221;的，而且这个属性在Mapping中是不存在的！</font></p>
<p>这样运行的下来的结果就是：</p>
<p>Hibernate: insert into parent (id) values (?)<br />
Hibernate: insert into child (parent_id, id) values (?, ?)</p>
<p>那么假如c.setParent(p)注释掉，结果就是：</p>
<p>Hibernate: insert into parent (id) values (?)</p>
<p>&nbsp;</p>
<p>＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝</p>
<p><strong style="font-size: 12pt">（实例2）：</strong></p>
<p>一个Person可以参加多个Event，一个Event有多个Person参加。<br />
映射文件如下：<br />
</p>
<div style="border-right: rgb(204,204,204) 1px solid; padding-right: 5px; border-top: rgb(204,204,204) 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: rgb(204,204,204) 1px solid; width: 98%; padding-top: 4px; border-bottom: rgb(204,204,204) 1px solid; background-color: rgb(238,238,238)"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: rgb(0,0,255)">&lt;!-- Person.hbm.xml --&gt;<br />
&lt;</span><span style="color: rgb(128,0,0)">hibernate-mapping&nbsp;</span><span style="color: rgb(255,0,0)">package</span><span style="color: rgb(0,0,255)">="events"</span><span style="color: rgb(0,0,255)">&gt;</span><span style="color: rgb(0,0,0)"><br />
&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">&lt;</span><span style="color: rgb(128,0,0)">class&nbsp;</span><span style="color: rgb(255,0,0)">name</span><span style="color: rgb(0,0,255)">="Person"</span><span style="color: rgb(255,0,0)">&nbsp;table</span><span style="color: rgb(0,0,255)">="person"</span><span style="color: rgb(0,0,255)">&gt;</span><span style="color: rgb(0,0,0)"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">&lt;</span><span style="color: rgb(128,0,0)">id&nbsp;</span><span style="color: rgb(255,0,0)">name</span><span style="color: rgb(0,0,255)">="id"</span><span style="color: rgb(255,0,0)">&nbsp;column</span><span style="color: rgb(0,0,255)">="person_id"</span><span style="color: rgb(0,0,255)">&gt;</span><span style="color: rgb(0,0,0)"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">&lt;</span><span style="color: rgb(128,0,0)">generator&nbsp;</span><span style="color: rgb(255,0,0)">class</span><span style="color: rgb(0,0,255)">="native"</span><span style="color: rgb(0,0,255)">/&gt;</span><span style="color: rgb(0,0,0)"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">&lt;/</span><span style="color: rgb(128,0,0)">id</span><span style="color: rgb(0,0,255)">&gt;</span><span style="color: rgb(0,0,0)"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">&lt;</span><span style="color: rgb(128,0,0)">property&nbsp;</span><span style="color: rgb(255,0,0)">name</span><span style="color: rgb(0,0,255)">="age"</span><span style="color: rgb(255,0,0)">&nbsp;length</span><span style="color: rgb(0,0,255)">="0"</span><span style="color: rgb(0,0,255)">/&gt;</span><span style="color: rgb(0,0,0)"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">&lt;</span><span style="color: rgb(128,0,0)">property&nbsp;</span><span style="color: rgb(255,0,0)">name</span><span style="color: rgb(0,0,255)">="firstname"</span><span style="color: rgb(0,0,255)">/&gt;</span><span style="color: rgb(0,0,0)"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">&lt;</span><span style="color: rgb(128,0,0)">property&nbsp;</span><span style="color: rgb(255,0,0)">name</span><span style="color: rgb(0,0,255)">="lastname"</span><span style="color: rgb(0,0,255)">/&gt;</span><span style="color: rgb(0,0,0)"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">&lt;</span><span style="color: rgb(128,0,0)">set&nbsp;</span><span style="color: rgb(255,0,0)">name</span><span style="color: rgb(0,0,255)">="events"</span><span style="color: rgb(255,0,0)">&nbsp;table</span><span style="color: rgb(0,0,255)">="person_event"</span><span style="color: rgb(0,0,255)">&gt;</span><span style="color: rgb(0,0,0)"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">&lt;</span><span style="color: rgb(128,0,0)">key&nbsp;</span><span style="color: rgb(255,0,0)">column</span><span style="color: rgb(0,0,255)">="person_id"</span><span style="color: rgb(0,0,255)">/&gt;</span><span style="color: rgb(0,0,0)"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">&lt;</span><span style="color: rgb(128,0,0)">many-to-many&nbsp;</span><span style="color: rgb(255,0,0)">column</span><span style="color: rgb(0,0,255)">="event_id"</span><span style="color: rgb(255,0,0)">&nbsp;class</span><span style="color: rgb(0,0,255)">="events.Event"</span><span style="color: rgb(0,0,255)">/&gt;</span><span style="color: rgb(0,0,0)"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">&lt;/</span><span style="color: rgb(128,0,0)">set</span><span style="color: rgb(0,0,255)">&gt;</span><span style="color: rgb(0,0,0)"><br />
&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">&lt;/</span><span style="color: rgb(128,0,0)">class</span><span style="color: rgb(0,0,255)">&gt;</span><span style="color: rgb(0,0,0)"><br />
</span><span style="color: rgb(0,0,255)">&lt;/</span><span style="color: rgb(128,0,0)">hibernate-mapping</span><span style="color: rgb(0,0,255)">&gt;</span></div>
<br />
<div style="border-right: rgb(204,204,204) 1px solid; padding-right: 5px; border-top: rgb(204,204,204) 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: rgb(204,204,204) 1px solid; width: 98%; padding-top: 4px; border-bottom: rgb(204,204,204) 1px solid; background-color: rgb(238,238,238)"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: rgb(0,0,255)">&lt;!-- Event.hbm.xml --&gt;<br />
&lt;</span><span style="color: rgb(128,0,0)">hibernate-mapping</span><span style="color: rgb(0,0,255)">&gt;</span><span style="color: rgb(0,0,0)"><br />
&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">&lt;</span><span style="color: rgb(128,0,0)">class&nbsp;</span><span style="color: rgb(255,0,0)">name</span><span style="color: rgb(0,0,255)">="events.Event"</span><span style="color: rgb(255,0,0)">&nbsp;table</span><span style="color: rgb(0,0,255)">="events"</span><span style="color: rgb(0,0,255)">&gt;</span><span style="color: rgb(0,0,0)"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">&lt;</span><span style="color: rgb(128,0,0)">id&nbsp;</span><span style="color: rgb(255,0,0)">name</span><span style="color: rgb(0,0,255)">="id"</span><span style="color: rgb(255,0,0)">&nbsp;column</span><span style="color: rgb(0,0,255)">="event_id"</span><span style="color: rgb(0,0,255)">&gt;</span><span style="color: rgb(0,0,0)"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">&lt;</span><span style="color: rgb(128,0,0)">generator&nbsp;</span><span style="color: rgb(255,0,0)">class</span><span style="color: rgb(0,0,255)">="native"</span><span style="color: rgb(0,0,255)">/&gt;</span><span style="color: rgb(0,0,0)"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">&lt;/</span><span style="color: rgb(128,0,0)">id</span><span style="color: rgb(0,0,255)">&gt;</span><span style="color: rgb(0,0,0)"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">&lt;</span><span style="color: rgb(128,0,0)">property&nbsp;</span><span style="color: rgb(255,0,0)">name</span><span style="color: rgb(0,0,255)">="date"</span><span style="color: rgb(255,0,0)">&nbsp;column</span><span style="color: rgb(0,0,255)">="events_date"</span><span style="color: rgb(255,0,0)">&nbsp;type</span><span style="color: rgb(0,0,255)">="timestamp"</span><span style="color: rgb(0,0,255)">/&gt;</span><span style="color: rgb(0,0,0)"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">&lt;</span><span style="color: rgb(128,0,0)">property&nbsp;</span><span style="color: rgb(255,0,0)">name</span><span style="color: rgb(0,0,255)">="title"</span><span style="color: rgb(255,0,0)">&nbsp;column</span><span style="color: rgb(0,0,255)">="events_title"</span><span style="color: rgb(0,0,255)">/&gt;</span><span style="color: rgb(0,0,0)"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">&lt;</span><span style="color: rgb(128,0,0)">set&nbsp;</span><span style="color: rgb(255,0,0)">name</span><span style="color: rgb(0,0,255)">="participants"</span><span style="color: rgb(255,0,0)">&nbsp;table</span><span style="color: rgb(0,0,255)">="person_event"</span><span style="color: rgb(255,0,0)">&nbsp;inverse</span><span style="color: rgb(0,0,255)">="true"</span><span style="color: rgb(0,0,255)">&gt;</span><span style="color: rgb(0,0,0)"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">&lt;</span><span style="color: rgb(128,0,0)">key&nbsp;</span><span style="color: rgb(255,0,0)">column</span><span style="color: rgb(0,0,255)">="event_id"</span><span style="color: rgb(0,0,255)">/&gt;</span><span style="color: rgb(0,0,0)"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">&lt;</span><span style="color: rgb(128,0,0)">many-to-many&nbsp;</span><span style="color: rgb(255,0,0)">column</span><span style="color: rgb(0,0,255)">="person_id"</span><span style="color: rgb(255,0,0)">&nbsp;class</span><span style="color: rgb(0,0,255)">="events.Person"</span><span style="color: rgb(0,0,255)">/&gt;</span><span style="color: rgb(0,0,0)"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">&lt;/</span><span style="color: rgb(128,0,0)">set</span><span style="color: rgb(0,0,255)">&gt;</span><span style="color: rgb(0,0,0)"><br />
&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">&lt;/</span><span style="color: rgb(128,0,0)">class</span><span style="color: rgb(0,0,255)">&gt;</span><span style="color: rgb(0,0,0)"><br />
</span><span style="color: rgb(0,0,255)">&lt;/</span><span style="color: rgb(128,0,0)">hibernate-mapping</span><span style="color: rgb(0,0,255)">&gt;</span></div>
<br />
inverse=true的含义: 由双向关联另一方维护该关联,己方不维护该关联(只能进行查询操作)。在上述代码中，由Person方维护该&lt;many-to-many&gt;关系，示例代码如下(以向Person参与的Event中加入新的Event为例)：<br />
<div style="border-right: rgb(204,204,204) 1px solid; padding-right: 5px; border-top: rgb(204,204,204) 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: rgb(204,204,204) 1px solid; width: 98%; padding-top: 4px; border-bottom: rgb(204,204,204) 1px solid; background-color: rgb(238,238,238)"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Session&nbsp;session&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;HibernateUtil.getSessionFactory().getCurrentSession();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session.beginTransaction();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Person&nbsp;p&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;(Person)&nbsp;session.load(Person.</span><span style="color: rgb(0,0,255)">class</span><span style="color: rgb(0,0,0)">,&nbsp;personId);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Event&nbsp;e&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;(Event)&nbsp;session.load(Event.</span><span style="color: rgb(0,0,255)">class</span><span style="color: rgb(0,0,0)">,&nbsp;eventId);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong><font color="#0000ff">&nbsp;p.getEvents().add(e);</font></strong>//执行该代码时，hibernate会向中间表 person_event中插入person_id和event_id记录，如果换成<font color="#a52a2a"><strong>e.getParticipants().add(p)</strong></font>的话，该代码将不会被执行，即hibernate不会向表person_event中插入记录。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session.getTransaction().commit();</span></div>
<p><br />
要注意的一点：在双向关联的关系中，映射的column(和table)的值要一致(即要用相同的表名和列名)，不然设置为inverse="true"的这方将失去这个双向关系，而变成了一个单向关联。<br />
</p>
<p>二、Inverse和Cascade的比较</p>
<p>Inverse：负责控制关系，默认为false，也就是关系的两端都能控制，但这样会造成一些问题，更新的时候会因为两端都控制关系，于是重复更新。一般来说有一端要设为true。<br />
Cascade：负责控制关联对象的级联操作，包括更新、删除等，也就是说对一个对象进行更新、删除时，其它对象也受影响，比如我删除一个对象，那么跟它是多对一关系的对象也全部被删除。<br />
举例说明区别：删除&#8220;一&#8221;那一端一个对象O的时候，如果&#8220;多&#8221;的那一端的Inverse设为true，则把&#8220;多&#8221;的那一端所有与O相关联的对象外键清空；如果&#8220;多&#8221;的那一端的Cascade设为Delete，则把&#8220;多&#8221;的那一端所有与O相关联的对象全部删除。</p>
<img src ="http://www.blogjava.net/huyi0616/aggbug/306563.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/huyi0616/" target="_blank">一杯清茶</a> 2009-12-18 15:17 <a href="http://www.blogjava.net/huyi0616/archive/2009/12/18/306563.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Hibernate的检索策略小结(转)</title><link>http://www.blogjava.net/huyi0616/archive/2008/12/17/246878.html</link><dc:creator>一杯清茶</dc:creator><author>一杯清茶</author><pubDate>Wed, 17 Dec 2008 07:24:00 GMT</pubDate><guid>http://www.blogjava.net/huyi0616/archive/2008/12/17/246878.html</guid><wfw:comment>http://www.blogjava.net/huyi0616/comments/246878.html</wfw:comment><comments>http://www.blogjava.net/huyi0616/archive/2008/12/17/246878.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/huyi0616/comments/commentRss/246878.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/huyi0616/services/trackbacks/246878.html</trackback:ping><description><![CDATA[&nbsp; Hibernate的检索策略包括类级别检索策略和关联级别检索策略。
<p style="margin-bottom: 0cm"><font face="文鼎PL细上海宋Uni, serif"></font>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 类级别检索策略有立即检索和延迟检索，默认的检索策略是立即检索。在<font face="文鼎PL细上海宋Uni, serif">Hibernate</font>映射文件中，通过在<font face="文鼎PL细上海宋Uni, serif">&lt;class&gt;</font>上配置<font face="文鼎PL细上海宋Uni, serif">lazy</font>属性来确定检索策略。对于<font face="文鼎PL细上海宋Uni, serif">Session</font>的检索方式，类级别检索策略仅适用于<font face="文鼎PL细上海宋Uni, serif">load</font>方法；也就说，对于<font face="文鼎PL细上海宋Uni, serif">get</font>、<font face="文鼎PL细上海宋Uni, serif">qurey</font>检索，持久化对象都会被立即加载而不管<font face="文鼎PL细上海宋Uni, serif">lazy</font>是<font face="文鼎PL细上海宋Uni, serif">false</font>还是<font face="文鼎PL细上海宋Uni, serif">true</font>。一般来说，我们检索对象就是要访问它，因此立即检索是通常的选择。由于<font face="文鼎PL细上海宋Uni, serif">load</font>方法在检索不到对象时会抛出异常（立即检索的情况下），因此我个人并不建议使用<font face="文鼎PL细上海宋Uni, serif">load</font>检索；而由于<font face="文鼎PL细上海宋Uni, serif">&lt;class&gt;</font>中的<font face="文鼎PL细上海宋Uni, serif">lazy</font>属性还影响到多对一及一对一的检索策略，因此使用<font face="文鼎PL细上海宋Uni, serif">load</font>方法就更没必要了。</p>
<p style="margin-bottom: 0cm"><font face="文鼎PL细上海宋Uni, serif"></font>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 关联级别检索策略有立即检索、延迟检索和迫切左外连接检索。对于关联级别检索，又可分为一对多和多对多、多对一和一对一两种情况讨论。</p>
<p style="margin-bottom: 0cm"><font face="文鼎PL细上海宋Uni, serif"></font>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 一对多和多对多关联关系一般使用<font face="文鼎PL细上海宋Uni, serif">&lt;set&gt;</font>配置。<font face="文鼎PL细上海宋Uni, serif">&lt;set&gt;</font>有<font face="文鼎PL细上海宋Uni, serif">lazy</font>和<font face="文鼎PL细上海宋Uni, serif">outer-join</font>属性，它们的不同取值绝对了检索策略。</p>
<p style="margin-bottom: 0cm"><font face="文鼎PL细上海宋Uni, serif">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 1</font>）立即检索：这是一对多默认的检索策略，此时<font face="文鼎PL细上海宋Uni, serif">lazy=false</font>，<font face="文鼎PL细上海宋Uni, serif">outer-join=false</font>。尽管这是默认的检索策略，但如果关联的集合是无用的，那么就不要使用这种检索方式。</p>
<p style="margin-bottom: 0cm"><font face="文鼎PL细上海宋Uni, serif">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 2</font>）延迟检索：此时<font face="文鼎PL细上海宋Uni, serif">lazy=true</font>，<font face="文鼎PL细上海宋Uni, serif">outer-join=false</font>（<font face="文鼎PL细上海宋Uni, serif">outer-join=true</font>是无意义的），这是优先考虑的检索方式。</p>
<p style="margin-bottom: 0cm"><font face="文鼎PL细上海宋Uni, serif">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 3</font>）迫切左外连接检索：此时 <font face="文鼎PL细上海宋Uni, serif">lazy=false</font>，<font face="文鼎PL细上海宋Uni, serif">outer-join=true</font>，这种检索策略只适用于依靠<font face="文鼎PL细上海宋Uni, serif">id</font>检索方式（<font face="文鼎PL细上海宋Uni, serif">load</font>、<font face="文鼎PL细上海宋Uni, serif">get</font>），而不适用于<font face="文鼎PL细上海宋Uni, serif">query</font>的集合检索（它会采用立即检索策略）。相比于立即检索，这种检索策略减少了一条<font face="文鼎PL细上海宋Uni, serif">sql</font>语句，但在<font face="文鼎PL细上海宋Uni, serif">Hibernate</font>中，只能有一个<font face="文鼎PL细上海宋Uni, serif">&lt;set&gt;</font>配置成 <font face="文鼎PL细上海宋Uni, serif">outer-join=true</font>。</p>
<p style="margin-bottom: 0cm"><font face="文鼎PL细上海宋Uni, serif"></font>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 多对一和一对一检索策略一般使用<font face="文鼎PL细上海宋Uni, serif">&lt;many-to-one&gt;</font>、<font face="文鼎PL细上海宋Uni, serif">&lt;one-to-one&gt;</font>配置。<font face="文鼎PL细上海宋Uni, serif">&lt;many-to-one&gt;</font>中需要配置的属性是 <font face="文鼎PL细上海宋Uni, serif">outer-join</font>，同时还需要配置<font face="文鼎PL细上海宋Uni, serif">one</font>端关联的<font face="文鼎PL细上海宋Uni, serif">&lt;class&gt;</font>的<font face="文鼎PL细上海宋Uni, serif">lazy</font>属性（配置的可不是<font face="文鼎PL细上海宋Uni, serif">&lt;many-to-one&gt;</font>中的<font face="文鼎PL细上海宋Uni, serif">lazy</font>哦），它们的组合后的检索策略如下：</p>
<p style="margin-bottom: 0cm"><font face="文鼎PL细上海宋Uni, serif">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 1</font>） <font face="文鼎PL细上海宋Uni, serif">outer-join=auto</font>：这是默认值，如果<font face="文鼎PL细上海宋Uni, serif">lazy=true</font>为延迟检索，如果<font face="文鼎PL细上海宋Uni, serif">lazy=false</font>为迫切左外连接检索。</p>
<p style="margin-bottom: 0cm"><font face="文鼎PL细上海宋Uni, serif">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 2</font>） <font face="文鼎PL细上海宋Uni, serif">outer-join=true</font>，无关于<font face="文鼎PL细上海宋Uni, serif">lazy</font>，都为迫切左外连接检索。</p>
<p style="margin-bottom: 0cm"><font face="文鼎PL细上海宋Uni, serif">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 3</font>） <font face="文鼎PL细上海宋Uni, serif">outer-join=false</font>，如果<font face="文鼎PL细上海宋Uni, serif">lazy=true</font>为延迟检索，否则为立即检索。</p>
<p style="margin-bottom: 0cm"><font face="文鼎PL细上海宋Uni, serif"></font>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 可以看到，在默认的情况下（<font face="文鼎PL细上海宋Uni, serif">outer-join=auto</font>，<font face="文鼎PL细上海宋Uni, serif">lazy=false</font>），对关联的<font face="文鼎PL细上海宋Uni, serif">one</font>端对象<font face="文鼎PL细上海宋Uni, serif">Hibernate</font>采用的迫切左外连接检索。依我看，很多情况下，我们并不需要加载<font face="文鼎PL细上海宋Uni, serif">one</font>端关联的对象（很可能我们需要的仅仅是关联对象的<font face="文鼎PL细上海宋Uni, serif">id</font>）；另外，如果关联对象也采用了迫切左外连接检索，就会出现<font face="文鼎PL细上海宋Uni, serif">select</font>语句中有多个外连接表，如果个数多的话会影响检索性能，这也是为什么<font face="文鼎PL细上海宋Uni, serif">Hibernate</font>通过<font face="文鼎PL细上海宋Uni, serif">hibernate.max_fetch_depth</font>属性来控制外连接的深度。对于迫切左外连接检索，<font face="文鼎PL细上海宋Uni, serif">query</font>的集合检索并不适用，它会采用立即检索策略。</p>
<p style="margin-bottom: 0cm"><font face="文鼎PL细上海宋Uni, serif"></font>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 对于检索策略，需要根据实际情况进行选择。对于立即检索和延迟检索，它们的优点在于<font face="文鼎PL细上海宋Uni, serif">select</font>语句简单（每张表一条语句）、查询速度快，缺点在于关联表时需要多条<font face="文鼎PL细上海宋Uni, serif">select</font>语句，增加了访问数据库的频率。因此在选择即检索和延迟检索时，可以考虑使用批量检索策略来减少<font face="文鼎PL细上海宋Uni, serif">select</font>语句的数量（配置<font face="文鼎PL细上海宋Uni, serif">batch-size</font>属性）。对于切左外连接检索，优点在于<font face="文鼎PL细上海宋Uni, serif">select</font>较少，但缺点是<font face="文鼎PL细上海宋Uni, serif">select</font>语句的复杂度提高，多表之间的关联会是很耗时的操作。另外，配置文件是死的，但程序是活的，可以根据需要在程序里显示的指定检索策略（可能经常需要在程序中显示指定迫切左外连接检索）。为了清楚检索策略的配置效果如何，可以配置<font face="文鼎PL细上海宋Uni, serif">show_sql</font>属性查看程序运行时<font face="文鼎PL细上海宋Uni, serif">Hibernate</font>执行的<font face="文鼎PL细上海宋Uni, serif">sql</font>语句。</p>
<p style="margin-bottom: 0cm"><font face="文鼎PL细上海宋Uni, serif"></font>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br />
</p>
<p style="margin-bottom: 0cm">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 注：本文是《精通<font face="文鼎PL细上海宋Uni, serif">Hibernate</font>》（孙卫琴著）的温习笔记，关于<font face="文鼎PL细上海宋Uni, serif">Hibernate</font>的检索策略的详细内容，请参考原书。</p>
<img src ="http://www.blogjava.net/huyi0616/aggbug/246878.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/huyi0616/" target="_blank">一杯清茶</a> 2008-12-17 15:24 <a href="http://www.blogjava.net/huyi0616/archive/2008/12/17/246878.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用dom4j读取xml文档，并修改文档</title><link>http://www.blogjava.net/huyi0616/archive/2008/04/23/195105.html</link><dc:creator>一杯清茶</dc:creator><author>一杯清茶</author><pubDate>Wed, 23 Apr 2008 07:06:00 GMT</pubDate><guid>http://www.blogjava.net/huyi0616/archive/2008/04/23/195105.html</guid><description><![CDATA[自用文档，请不要转载！<br />
<br />
<br />
public void prot() throws Exception{&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; String path=FileLocator.toFileURL(Platform.getBundle(AppConn.APPLICATION_ID).getEntry("")).getPath()<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .toString()+"src/hibernate.cfg.xml";<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; File cfgFile=new File(path);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; SAXReader reader=new SAXReader();&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; reader.setEntityResolver(new EntityResolver()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; public InputSource resolveEntity(String publicId,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String systemId)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (publicId.equals("-//Hibernate/Hibernate Configuration DTD 3.0//EN"))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; InputStream in = getClass().getResourceAsStream(&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "/hibernate-configuration-3.0.dtd");&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return new InputSource(in);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return null;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }); &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Document document=null;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; try {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; document = reader.read(cfgFile);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; } catch (DocumentException e) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // TODO Auto-generated catch block<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; e.printStackTrace();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Element root=document.getRootElement();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; List list=root.selectNodes("//property");<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Iterator it=list.iterator();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; while(it.hasNext()){<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Element nextelement=(Element)it.next();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; String&nbsp; text=nextelement.attributeValue("name");<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if(text.equals("connection.username")){<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; nextelement.setText("");&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if(text.equals("connection.password")){&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; nextelement.setText("");&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if(text.equals("connection.url")){<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; nextelement.setText("");&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; XMLWriter output=new XMLWriter(new FileWriter(cfgFile),OutputFormat.createPrettyPrint());<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; output.write(document);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; output.flush();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; output.close();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; } catch (HibernateException e) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // TODO Auto-generated catch block<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; e.printStackTrace();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
<img src ="http://www.blogjava.net/huyi0616/aggbug/195105.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/huyi0616/" target="_blank">一杯清茶</a> 2008-04-23 15:06 <a href="http://www.blogjava.net/huyi0616/archive/2008/04/23/195105.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>