﻿<?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-杂家-随笔分类-3.Hibernate</title><link>http://www.blogjava.net/super2/category/35623.html</link><description>学习学习</description><language>zh-cn</language><lastBuildDate>Tue, 03 Mar 2009 11:49:28 GMT</lastBuildDate><pubDate>Tue, 03 Mar 2009 11:49:28 GMT</pubDate><ttl>60</ttl><item><title>Hibernate连接池</title><link>http://www.blogjava.net/super2/archive/2009/03/03/257621.html</link><dc:creator>淘声依旧</dc:creator><author>淘声依旧</author><pubDate>Tue, 03 Mar 2009 09:16:00 GMT</pubDate><guid>http://www.blogjava.net/super2/archive/2009/03/03/257621.html</guid><wfw:comment>http://www.blogjava.net/super2/comments/257621.html</wfw:comment><comments>http://www.blogjava.net/super2/archive/2009/03/03/257621.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/super2/comments/commentRss/257621.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/super2/services/trackbacks/257621.html</trackback:ping><description><![CDATA[我花了三个晚上的时间，把hibernate与三种常用连接池的配置研究出来，希望对大家有帮助。 <br />
<br />
以下三种连接都是以连接MySQl为例。 <br />
<br />
&lt;!--&nbsp;JDBC驱动程序&nbsp;--&gt; <br />
&lt;property&nbsp;name="connection.driver_class"&amp;
gt;org.gjt.mm.mysql.Driver&lt;/property&gt;&nbsp;&lt;property&nbsp;name="connection.url"&amp;
gt;jdbc:mysql://localhost:3306/struts?useUnicode=true&amp;
characterEncoding=GBK&lt;/property&gt;&nbsp;&lt;!--&nbsp;数据库用户名&nbsp;--&gt; <br />
&lt;property&nbsp;name="connection.username"&gt;root&lt;/property&gt;&nbsp;&lt;!--&nbsp;数据库密码&nbsp;--&gt; <br />
&lt;property&nbsp;name="connection.password"&gt;8888&lt;/property&gt; <br />
<br />
上
面的一段配置，在c3p0和dbcp中，都是必需的，因为hibernate会根据上述的配置来生成connections，再交给c3p0或dbcp管
理.但是，proxool则不能，虽然说服文档上说proxool也可以和hibernate结合,但我按照官方文档上的说明怎么配也出错，而且，到
了&nbsp;sun和hibernat有的官方网站上问了几天，都没有一个人回复。后来我只能让proxool自身来生成连接，这在下面再讲。 <br />
<br />
<br />
1&nbsp;C3P0 <br />
<br />
只需在hibernate.cfg.xml中加入 <br />
&lt;property&nbsp;name="c3p0.min_size"&gt;5&lt;/property&gt; <br />
&lt;property&nbsp;name="c3p0.max_size"&gt;30&lt;/property&gt; <br />
&lt;property&nbsp;name="c3p0.time_out"&gt;1800&lt;/property&gt; <br />
&lt;property&nbsp;name="c3p0.max_statement"&gt;50&lt;/property&gt; <br />
<br />
还有在classespath中加入c3p0-0.8.4.5.jar <br />
<br />
<br />
2&nbsp;dbcp <br />
<br />
在hibernate.cfg.xml中加入 <br />
<br />
&lt;property&nbsp;name="dbcp.maxActive"&gt;100&lt;/property&gt; <br />
&lt;property&nbsp;name="dbcp.whenExhaustedAction"&gt;1&lt;/property&gt; <br />
&lt;property&nbsp;name="dbcp.maxWait"&gt;60000&lt;/property&gt; <br />
&lt;property&nbsp;name="dbcp.maxIdle"&gt;10&lt;/property&gt; <br />
<br />
&lt;property&nbsp;name="dbcp.ps.maxActive"&gt;100&lt;/property&gt; <br />
&lt;property&nbsp;name="dbcp.ps.whenExhaustedAction"&gt;1&lt;/property&gt; <br />
&lt;property&nbsp;name="dbcp.ps.maxWait"&gt;60000&lt;/property&gt; <br />
&lt;property&nbsp;name="dbcp.ps.maxIdle"&gt;10&lt;/property&gt; <br />
<br />
<br />
还有在classespath中加入commons-pool-1.2.jar&nbsp;和commons-dbcp-1.2.1.jar. <br />
<br />
<br />
3&nbsp;proxool <br />
<br />
在hibernate.cfg.xml中加入 <br />
<br />
&lt;property&nbsp;name="proxool.pool_alias"&gt;pool1&lt;/property&gt; <br />
&lt;property&nbsp;name="proxool.xml"&gt;ProxoolConf.xml&lt;/property&gt; <br />
&lt;property&nbsp;name="connection.provider_class"&gt;net.sf.hibernate.connection.ProxoolConnectionProvider&lt;/property&gt; <br />
<br />
然后，在和hibernate.cfg.xml同一个目录下，加一个ProxoolConf.xml文件，内容为 <br />
<br />
&lt;?xml&nbsp;version="1.0"&nbsp;encoding="utf-8"?&gt; <br />
&lt;!--&nbsp;the&nbsp;proxool&nbsp;configuration&nbsp;can&nbsp;be&nbsp;embedded&nbsp;within&nbsp;your&nbsp;own&nbsp;application's. <br />
Anything&nbsp;outside&nbsp;the&nbsp;"proxool"&nbsp;tag&nbsp;is&nbsp;ignored.&nbsp;--&gt; <br />
&lt;something-else-entirely&gt; <br />
&lt;proxool&gt; <br />
&lt;alias&gt;pool1&lt;/alias&gt; <br />
&lt;!--proxool只能管理由自己产生的连接--&gt; <br />
&lt;driver-url&gt;jdbc:mysql://localhost:3306/struts?useUnicode=true&amp;characterEncoding=GBK&lt;/driver-url&gt; <br />
&lt;driver-class&gt;org.gjt.mm.mysql.Driver&lt;/driver-class&gt; <br />
&lt;driver-properties&gt; <br />
&lt;property&nbsp;name="user"&nbsp;value="root"/&gt; <br />
&lt;property&nbsp;name="password"&nbsp;value="8888"/&gt; <br />
&lt;/driver-properties&gt; <br />
&lt;!--&nbsp;proxool自动侦察各个连接状态的时间间隔(毫秒),侦察到空闲的连接就马上回收,超时的销毁--&gt; <br />
&lt;house-keeping-sleep-time&gt;90000&lt;/house-keeping-sleep-time&gt; <br />
&lt;!--&nbsp;指因未有空闲连接可以分配而在队列中等候的最大请求数,超过这个请求数的用户连接就不会被接受--&gt; <br />
&lt;maximum-new-connections&gt;20&lt;/maximum-new-connections&gt; <br />
&lt;!--&nbsp;最少保持的空闲连接数--&gt; <br />
&lt;prototype-count&gt;5&lt;/prototype-count&gt; <br />
&lt;!--&nbsp;允许最大连接数,超过了这个连接，再有请求时，就排在队列中等候，最大的等待请求数由maximum-new-connections决定--&gt; <br />
&lt;maximum-connection-count&gt;100&lt;/maximum-connection-count&gt; <br />
&lt;!--&nbsp;最小连接数--&gt; <br />
&lt;minimum-connection-count&gt;10&lt;/minimum-connection-count&gt; <br />
&lt;/proxool&gt; <br />
&lt;/something-else-entirely&gt; <br />
<br />
<br />
并在classespath中加入proxool-0.8.3.jar <br />
<br />
<br />
<br />
结论： <br />
<br />
由
于在hibernate3.0中，已经不再支持dbcp了，hibernate的作者在hibernate.org中，明确指出在实践中发现dbcp
有&nbsp;BUG,在某些种情会产生很多空连接不能释放，所以抛弃了对dbcp的支持。我不知是否在dbcp最新版本中解决了这个问题，我以前在一个访问量不大
的项目中用过dbcp，运行了一年多都没出现问题。不过在网上的确也有不少网友指出dbcp在大型的应用中会出现不稳定的情况。所以在真相未经证实的情况
下，我觉得对dbcp持慎重的态度。 <br />
<br />
至于c3p0，有评论说它的算法不是最优的，而且，我在matrix中，见到有网友做了一个实验，在同一项目中分别用了几个常用的连接池，然后测试其性能，发现c3p0占用资源比较大，效率也不高。 <br />
<br />
所以，基于上述原因，我才花两晚的时间去研究proxool的配置，proxool不少行家推荐使用，而且暂时来说，是负面评价是最少的一个。在三星中也有项目是用proxool的。 <br />
<br />
欢迎大家就连接池的问题多研究，多多发表自己的经验心得。&nbsp;<img src ="http://www.blogjava.net/super2/aggbug/257621.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/super2/" target="_blank">淘声依旧</a> 2009-03-03 17:16 <a href="http://www.blogjava.net/super2/archive/2009/03/03/257621.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用Hibernate3实现分页功能</title><link>http://www.blogjava.net/super2/archive/2008/10/29/237465.html</link><dc:creator>淘声依旧</dc:creator><author>淘声依旧</author><pubDate>Wed, 29 Oct 2008 11:45:00 GMT</pubDate><guid>http://www.blogjava.net/super2/archive/2008/10/29/237465.html</guid><wfw:comment>http://www.blogjava.net/super2/comments/237465.html</wfw:comment><comments>http://www.blogjava.net/super2/archive/2008/10/29/237465.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/super2/comments/commentRss/237465.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/super2/services/trackbacks/237465.html</trackback:ping><description><![CDATA[参考资料:
<p><a href="http://blog.csdn.net/zhjb1025/archive/2006/04/19/668631.aspx">http://blog.csdn.net/zhjb1025/archive/2006/04/19/668631.aspx</a></p>
<p><a href="http://www.cnblogs.com/HuaiHuai/archive/2005/08/09/211062.html">http://www.cnblogs.com/HuaiHuai/archive/2005/08/09/211062.html</a></p>
<p>&nbsp;</p>
<p>整理的代码如下：</p>
<p>Page.java接口</p>
<div class="highlighter">
<ol class="highlighter-j">
    <li><span class="keyword">package</span><span>&nbsp;org.domain.scrm4u.helper;</span></li>
    <li class="alt"><br />
    </li>
    <li><span class="keyword">import</span><span>&nbsp;java.util.List;</span></li>
    <li class="alt"><br />
    </li>
    <li><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">interface</span><span>&nbsp;Page&nbsp;{</span></li>
    <li class="alt"><br />
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">boolean</span><span>&nbsp;isFirstPage();</span></li>
    <li class="alt"><br />
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">boolean</span><span>&nbsp;isLastPage();</span></li>
    <li class="alt"><br />
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">boolean</span><span>&nbsp;hasNextPage();</span></li>
    <li class="alt"><br />
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">boolean</span><span>&nbsp;hasPreviousPage();</span></li>
    <li class="alt"><br />
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">int</span><span>&nbsp;getLastPageNumber();</span></li>
    <li class="alt"><br />
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;List&lt;?&gt;&nbsp;getThisPageElements();</span></li>
    <li class="alt"><br />
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">int</span><span>&nbsp;getTotalNumberOfElements();</span></li>
    <li class="alt"><br />
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">int</span><span>&nbsp;getThisPageFirstElementNumber();</span></li>
    <li class="alt"><br />
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">int</span><span>&nbsp;getThisPageLastElementNumber();</span></li>
    <li class="alt"><br />
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">int</span><span>&nbsp;getNextPageNumber();</span></li>
    <li class="alt"><br />
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">int</span><span>&nbsp;getPreviousPageNumber();</span></li>
    <li class="alt"><br />
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">int</span><span>&nbsp;getPageSize();</span></li>
    <li class="alt"><br />
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">int</span><span>&nbsp;getPageNumber();</span></li>
    <li class="alt"><span>}</span></li>
</ol>
</div>
<p><font color="#000000">ListPage.java实现：</font></p>
<div class="highlighter">
<ol class="highlighter-j">
    <li><span class="keyword">package</span><span>&nbsp;org.domain.scrm4u.helper.impl;</span></li>
    <li class="alt"><br />
    </li>
    <li><span class="keyword">import</span><span>&nbsp;java.util.List;</span></li>
    <li class="alt"><br />
    </li>
    <li><span class="keyword">import</span><span>&nbsp;org.domain.scrm4u.helper.Page;</span></li>
    <li class="alt"><br />
    </li>
    <li><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;ListPage&nbsp;</span><span class="keyword">implements</span><span>&nbsp;Page&nbsp;{</span></li>
    <li class="alt"><br />
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;List&lt;?&gt;&nbsp;elements;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;</span><span class="keyword">int</span><span>&nbsp;pageSize;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;</span><span class="keyword">int</span><span>&nbsp;pageNumber;</span></li>
    <li class="alt"><br />
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;ListPage(List&lt;?&gt;&nbsp;elements,&nbsp;</span><span class="keyword">int</span><span>&nbsp;pageNumber,&nbsp;</span><span class="keyword">int</span><span>&nbsp;pageSize)&nbsp;{</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.elements&nbsp;=&nbsp;elements;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.pageSize&nbsp;=&nbsp;pageSize;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.pageNumber&nbsp;=&nbsp;pageNumber;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>&nbsp;(Integer.MAX_VALUE&nbsp;==&nbsp;</span><span class="keyword">this</span><span>.pageNumber)&nbsp;</span><span class="keyword">this</span><span>.pageNumber&nbsp;=&nbsp;(getTotalNumberOfElements()&nbsp;/&nbsp;</span><span class="keyword">this</span><span>.pageSize);</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li class="alt"><br />
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">boolean</span><span>&nbsp;isFirstPage()&nbsp;{</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;getPageNumber()&nbsp;==&nbsp;</span><span class="number">0</span><span>;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li><br />
    </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">boolean</span><span>&nbsp;isLastPage()&nbsp;{</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;getPageNumber()&nbsp;&gt;=&nbsp;getLastPageNumber();</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li class="alt"><br />
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">boolean</span><span>&nbsp;hasNextPage()&nbsp;{</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;((getPageNumber()&nbsp;+&nbsp;</span><span class="number">1</span><span>)&nbsp;*&nbsp;getPageSize())&nbsp;&lt;&nbsp;(getTotalNumberOfElements()&nbsp;+&nbsp;</span><span class="number">1</span><span>);</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li><br />
    </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">boolean</span><span>&nbsp;hasPreviousPage()&nbsp;{</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;getPageNumber()&nbsp;&gt;&nbsp;</span><span class="number">0</span><span>;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li class="alt"><br />
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">int</span><span>&nbsp;getLastPageNumber()&nbsp;{</span></li>
    <li class="alt"><br />
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">double</span><span>&nbsp;totalResults&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;Integer(getTotalNumberOfElements()).doubleValue();</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;</span><span class="keyword">new</span><span>&nbsp;Double(Math.floor(totalResults&nbsp;/&nbsp;getPageSize())).intValue();</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li class="alt"><br />
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;List&lt;?&gt;&nbsp;getThisPageElements()&nbsp;{</span></li>
    <li class="alt"><br />
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">final</span><span>&nbsp;</span><span class="keyword">int</span><span>&nbsp;start&nbsp;=&nbsp;getPageNumber()&nbsp;*&nbsp;getPageSize();</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;elements.subList(</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Math.min(start,&nbsp;getTotalNumberOfElements()&nbsp;+&nbsp;</span><span class="number">1</span><span>),&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Math.min(start&nbsp;+&nbsp;getPageSize(),&nbsp;getTotalNumberOfElements()&nbsp;+&nbsp;</span><span class="number">1</span><span>)</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;);</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li><br />
    </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">int</span><span>&nbsp;getTotalNumberOfElements()&nbsp;{</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;elements.size()&nbsp;-&nbsp;</span><span class="number">1</span><span>;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li><br />
    </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">int</span><span>&nbsp;getThisPageFirstElementNumber()&nbsp;{</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;getPageNumber()&nbsp;*&nbsp;getPageSize()&nbsp;+&nbsp;</span><span class="number">1</span><span>;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li><br />
    </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">int</span><span>&nbsp;getThisPageLastElementNumber()&nbsp;{</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">int</span><span>&nbsp;fullPage&nbsp;=&nbsp;getThisPageFirstElementNumber()&nbsp;+&nbsp;getPageSize()&nbsp;-&nbsp;</span><span class="number">1</span><span>;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;getTotalNumberOfElements()&nbsp;&lt;&nbsp;fullPage&nbsp;?&nbsp;getTotalNumberOfElements()&nbsp;:&nbsp;fullPage;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li class="alt"><br />
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">int</span><span>&nbsp;getNextPageNumber()&nbsp;{</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;getPageNumber()&nbsp;+&nbsp;</span><span class="number">1</span><span>;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li class="alt"><br />
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">int</span><span>&nbsp;getPreviousPageNumber()&nbsp;{</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;getPageNumber()&nbsp;-&nbsp;</span><span class="number">1</span><span>;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li class="alt"><br />
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">int</span><span>&nbsp;getPageSize()&nbsp;{</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;pageSize;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li class="alt"><br />
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">int</span><span>&nbsp;getPageNumber()&nbsp;{</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;pageNumber;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li class="alt"><span>}</span></li>
</ol>
</div>
<p><font color="#000000">HibernatePage.java实现：</font></p>
<div class="highlighter">
<ol class="highlighter-j">
    <li><span class="keyword">package</span><span>&nbsp;org.domain.scrm4u.helper.impl;</span></li>
    <li class="alt"><br />
    </li>
    <li><span class="keyword">import</span><span>&nbsp;java.util.List;</span></li>
    <li class="alt"><br />
    </li>
    <li><span class="keyword">import</span><span>&nbsp;org.domain.scrm4u.helper.Page;</span></li>
    <li class="alt"><span class="keyword">import</span><span>&nbsp;org.hibernate.HibernateException;</span></li>
    <li><span class="keyword">import</span><span>&nbsp;org.hibernate.Query;</span></li>
    <li class="alt"><span class="keyword">import</span><span>&nbsp;org.hibernate.ScrollMode;</span></li>
    <li><span class="keyword">import</span><span>&nbsp;org.hibernate.ScrollableResults;</span></li>
    <li class="alt"><br />
    </li>
    <li><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;HibernatePage&nbsp;</span><span class="keyword">implements</span><span>&nbsp;Page&nbsp;{</span></li>
    <li class="alt"><br />
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">protected</span><span>&nbsp;List&lt;?&gt;&nbsp;elements;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">protected</span><span>&nbsp;</span><span class="keyword">int</span><span>&nbsp;pageSize;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">protected</span><span>&nbsp;</span><span class="keyword">int</span><span>&nbsp;pageNumber;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">protected</span><span>&nbsp;</span><span class="keyword">int</span><span>&nbsp;totalElements&nbsp;=&nbsp;</span><span class="number">0</span><span>;</span></li>
    <li><br />
    </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;ScrollableResults&nbsp;scrollableResults;</span></li>
    <li><br />
    </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;HibernatePage(</span><span class="keyword">int</span><span>&nbsp;pageNumber,&nbsp;</span><span class="keyword">int</span><span>&nbsp;pageSize)&nbsp;{</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.pageNumber&nbsp;=&nbsp;pageNumber;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.pageSize&nbsp;=&nbsp;pageSize;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li><br />
    </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">boolean</span><span>&nbsp;isFirstPage()&nbsp;{</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;getPageNumber()&nbsp;==&nbsp;</span><span class="number">0</span><span>;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li><br />
    </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">boolean</span><span>&nbsp;isLastPage()&nbsp;{</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;getPageNumber()&nbsp;&gt;=&nbsp;getLastPageNumber();</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li class="alt"><br />
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">boolean</span><span>&nbsp;hasNextPage()&nbsp;{</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;elements.size()&nbsp;&gt;&nbsp;getPageSize();</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li><br />
    </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">boolean</span><span>&nbsp;hasPreviousPage()&nbsp;{</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;getPageNumber()&nbsp;&gt;&nbsp;</span><span class="number">0</span><span>;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li class="alt"><br />
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">int</span><span>&nbsp;getLastPageNumber()&nbsp;{</span></li>
    <li class="alt"><br />
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">double</span><span>&nbsp;totalResults&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;Integer(getTotalNumberOfElements()).doubleValue();</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;</span><span class="keyword">new</span><span>&nbsp;Double(Math.floor(totalResults&nbsp;/&nbsp;getPageSize())).intValue();</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li class="alt"><br />
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;List&lt;?&gt;&nbsp;getThisPageElements()&nbsp;{</span></li>
    <li class="alt"><br />
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;hasNextPage()&nbsp;?&nbsp;elements.subList(</span><span class="number">0</span><span>,&nbsp;getPageSize())&nbsp;:&nbsp;elements;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li><br />
    </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">int</span><span>&nbsp;getTotalNumberOfElements()&nbsp;{</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;totalElements;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li class="alt"><br />
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">int</span><span>&nbsp;getThisPageFirstElementNumber()&nbsp;{</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;getPageNumber()&nbsp;*&nbsp;getPageSize()&nbsp;+&nbsp;</span><span class="number">1</span><span>;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li><br />
    </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">int</span><span>&nbsp;getThisPageLastElementNumber()&nbsp;{</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">int</span><span>&nbsp;fullPage&nbsp;=&nbsp;getThisPageFirstElementNumber()&nbsp;+&nbsp;getPageSize()&nbsp;-&nbsp;</span><span class="number">1</span><span>;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;getTotalNumberOfElements()&nbsp;&lt;&nbsp;fullPage&nbsp;?&nbsp;getTotalNumberOfElements()&nbsp;:&nbsp;fullPage;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li><br />
    </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">int</span><span>&nbsp;getNextPageNumber()&nbsp;{</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;getPageNumber()&nbsp;+&nbsp;</span><span class="number">1</span><span>;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li class="alt"><br />
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">int</span><span>&nbsp;getPreviousPageNumber()&nbsp;{</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;getPageNumber()&nbsp;-&nbsp;</span><span class="number">1</span><span>;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li><br />
    </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">int</span><span>&nbsp;getPageSize()&nbsp;{</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;pageSize;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li class="alt"><br />
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">int</span><span>&nbsp;getPageNumber()&nbsp;{</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;pageNumber;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li><br />
    </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;HibernatePage&nbsp;getScrollPage(Query&nbsp;query,&nbsp;</span><span class="keyword">int</span><span>&nbsp;pageNumber,&nbsp;</span><span class="keyword">int</span><span>&nbsp;pageSize,&nbsp;ScrollMode&nbsp;scrollMode)&nbsp;{</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HibernatePage&nbsp;sp&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;HibernatePage(pageNumber,&nbsp;pageSize);</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">try</span><span>&nbsp;{</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sp.scrollableResults&nbsp;=&nbsp;query.scroll(scrollMode);</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(scrollMode&nbsp;==&nbsp;ScrollMode.SCROLL_SENSITIVE){</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sp.scrollableResults.last();</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sp.totalElements&nbsp;=&nbsp;sp.scrollableResults.getRowNumber();</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span class="keyword">else</span><span>&nbsp;{</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sp.totalElements&nbsp;=&nbsp;sp.calculateTotalElementsByList(query);</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sp.determineElements(query);</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span class="keyword">catch</span><span>&nbsp;(HibernateException&nbsp;e)&nbsp;{</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;sp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li><br />
    </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;determineElements(Query&nbsp;query)&nbsp;</span><span class="keyword">throws</span><span>&nbsp;HibernateException&nbsp;{</span></li>
    <li><br />
    </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>&nbsp;(Integer.MAX_VALUE&nbsp;==&nbsp;</span><span class="keyword">this</span><span>.pageNumber)&nbsp;</span><span class="keyword">this</span><span>.pageNumber&nbsp;=&nbsp;(getTotalNumberOfElements()&nbsp;/&nbsp;</span><span class="keyword">this</span><span>.pageSize);</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;elements&nbsp;=&nbsp;query.setFirstResult(</span><span class="keyword">this</span><span>.pageNumber&nbsp;*&nbsp;</span><span class="keyword">this</span><span>.pageSize).setMaxResults(</span><span class="keyword">this</span><span>.pageSize&nbsp;+&nbsp;</span><span class="number">1</span><span>).list();</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li><br />
    </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;</span><span class="keyword">int</span><span>&nbsp;calculateTotalElementsByList(Query&nbsp;query)&nbsp;</span><span class="keyword">throws</span><span>&nbsp;HibernateException&nbsp;{</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;query.list().size();</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li class="alt"><span>}</span></li>
</ol>
</div>
<p>简单分析一下：</p>
<p>ListPage实现需要把查询的结果集全部取出来。</p>
<p>我们着重还是分析一下HibernatePage的实现。</p>
<p>测试代码如下：</p>
<div class="highlighter">
<ol class="highlighter-j">
    <li><span class="keyword">import</span><span>&nbsp;java.io.IOException;</span></li>
    <li class="alt"><span class="keyword">import</span><span>&nbsp;java.sql.SQLException;</span></li>
    <li><span class="keyword">import</span><span>&nbsp;java.util.List;</span></li>
    <li class="alt"><br />
    </li>
    <li><span class="keyword">import</span><span>&nbsp;org.hibernate.Query;</span></li>
    <li class="alt"><span class="keyword">import</span><span>&nbsp;org.hibernate.ScrollMode;</span></li>
    <li><span class="keyword">import</span><span>&nbsp;org.hibernate.Session;</span></li>
    <li class="alt"><span class="keyword">import</span><span>&nbsp;org.hibernate.SessionFactory;</span></li>
    <li><span class="keyword">import</span><span>&nbsp;org.hibernate.cfg.AnnotationConfiguration;</span></li>
    <li class="alt"><span class="keyword">import</span><span>&nbsp;org.hibernate.cfg.Configuration;</span></li>
    <li><br />
    </li>
    <li class="alt"><span class="keyword">import</span><span>&nbsp;org.domain.scrm4u.helper.Page;</span></li>
    <li><span class="keyword">import</span><span>&nbsp;org.domain.scrm4u.helper.impl.HibernatePage;</span></li>
    <li class="alt"><span class="keyword">import</span><span>&nbsp;org.domain.scrm4u.entity.TPsn;</span></li>
    <li><br />
    </li>
    <li class="alt"><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;BusinessService&nbsp;{</span></li>
    <li><br />
    </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;main(String[]&nbsp;args)&nbsp;</span><span class="keyword">throws</span><span>&nbsp;IOException,&nbsp;SQLException&nbsp;{</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Configuration&nbsp;config&nbsp;=&nbsp;&nbsp;</span><span class="keyword">new</span><span>&nbsp;AnnotationConfiguration().configure();</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SessionFactory&nbsp;sessionFactory&nbsp;=&nbsp;config.buildSessionFactory();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Session&nbsp;session&nbsp;=&nbsp;sessionFactory.openSession();</span></li>
    <li class="alt"><br />
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;Hql&nbsp;=&nbsp;</span><span class="string">"from&nbsp;TPsn"</span><span>;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Query&nbsp;query&nbsp;=&nbsp;session.createQuery(Hql);</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Page&nbsp;page&nbsp;=&nbsp;HibernatePage.getScrollPage(query,&nbsp;</span><span class="number">0</span><span>,&nbsp;</span><span class="number">10</span><span>,&nbsp;<strong>ScrollMode.SCROLL_SENSITIVE</strong>);</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List&lt;?&gt;&nbsp;list&nbsp;=&nbsp;page.getThisPageElements();</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">for</span><span>&nbsp;(</span><span class="keyword">int</span><span>&nbsp;i&nbsp;=&nbsp;</span><span class="number">0</span><span>;&nbsp;i&nbsp;&lt;&nbsp;list.size();&nbsp;i++)&nbsp;{</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TPsn&nbsp;psn&nbsp;=&nbsp;(TPsn)list.get(i);</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(psn.getPsnNo()&nbsp;+&nbsp;</span><span class="string">"\t"</span><span>&nbsp;+&nbsp;psn.getPsnPnm()&nbsp;+&nbsp;</span><span class="string">"\t"</span><span>&nbsp;+&nbsp;psn.getPsnBrthDt());</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session.close();</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sessionFactory.close();</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li class="alt"><span>}</span></li>
</ol>
</div>
<p>测试中发现：</p>
<p>使用<strong><font color="#000000">ScrollMode.SCROLL_SENSITIVE</font></strong>比<strong><font color="#000000">ScrollMode.FORWARD_ONLY</font></strong>在性能上要快很多。具体选择要看使用的JDBC驱动是否支撑了，支持scroll的话就可以使用ScrollableResults类来处理结果集了。</p>
<p>&nbsp;</p>
<p>当然，我们还可以配合缓存技术让翻页更有效率。</p>
<img src ="http://www.blogjava.net/super2/aggbug/237465.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/super2/" target="_blank">淘声依旧</a> 2008-10-29 19:45 <a href="http://www.blogjava.net/super2/archive/2008/10/29/237465.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hibernate3学习笔记(二十三)｜进阶特性</title><link>http://www.blogjava.net/super2/archive/2008/10/29/237464.html</link><dc:creator>淘声依旧</dc:creator><author>淘声依旧</author><pubDate>Wed, 29 Oct 2008 11:43:00 GMT</pubDate><guid>http://www.blogjava.net/super2/archive/2008/10/29/237464.html</guid><wfw:comment>http://www.blogjava.net/super2/comments/237464.html</wfw:comment><comments>http://www.blogjava.net/super2/archive/2008/10/29/237464.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/super2/comments/commentRss/237464.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/super2/services/trackbacks/237464.html</trackback:ping><description><![CDATA[1.悲观锁定：
<p><a href="http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=3608">http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=3608</a></p>
<p>&nbsp;</p>
<p>2.乐观锁定：</p>
<p><a href="http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=3609">http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=3609</a></p>
<p>&nbsp;</p>
<p>3.<span class="pagetitle" style="margin: 0px; padding: 0px; text-decoration: none;">Lifecycle 介面、Validatable 介面：</span></p>
<p><span class="pagetitle" style="margin: 0px; padding: 0px; text-decoration: none;"><a href="http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=3610">http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=3610</a></span></p>
<p>&nbsp;</p>
<p><span class="pagetitle" style="margin: 0px; padding: 0px; text-decoration: none;">4.<span class="pagetitle" style="margin: 0px; padding: 0px; text-decoration: none;">Interceptor 介面：</span></span></p>
<p><span class="pagetitle" style="margin: 0px; padding: 0px; text-decoration: none;"><span class="pagetitle" style="margin: 0px; padding: 0px; text-decoration: none;"><a href="http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=3611">http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=3611</a></span></span></p>
<p><span class="pagetitle" style="margin: 0px; padding: 0px; text-decoration: none;"></span>&nbsp;</p>
<p><span class="pagetitle" style="margin: 0px; padding: 0px; text-decoration: none;"><span class="pagetitle" style="margin: 0px; padding: 0px; text-decoration: none;">5.<span class="pagetitle" style="margin: 0px; padding: 0px; text-decoration: none;">从映射文件生成数据表：</span></span></span></p>
<p><span class="pagetitle" style="margin: 0px; padding: 0px; text-decoration: none;"><span class="pagetitle" style="margin: 0px; padding: 0px; text-decoration: none;"><span class="pagetitle" style="margin: 0px; padding: 0px; text-decoration: none;"><a href="http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=3612">http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=3612</a></span></span></span></p>
<p><span class="pagetitle" style="margin: 0px; padding: 0px; text-decoration: none;"><span class="pagetitle" style="margin: 0px; padding: 0px; text-decoration: none;"></span></span>&nbsp;</p>
<p><span class="pagetitle" style="margin: 0px; padding: 0px; text-decoration: none;"><span class="pagetitle" style="margin: 0px; padding: 0px; text-decoration: none;"><span class="pagetitle" style="margin: 0px; padding: 0px; text-decoration: none;">6.<span class="pagetitle" style="margin: 0px; padding: 0px; text-decoration: none;">从数据表生成映射文件</span></span></span></span></p>
<p><span class="pagetitle" style="margin: 0px; padding: 0px; text-decoration: none;"><span class="pagetitle" style="margin: 0px; padding: 0px; text-decoration: none;"><span class="pagetitle" style="margin: 0px; padding: 0px; text-decoration: none;"><a href="http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=3613">http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=3613</a></span></span></span></p>
<p><span class="pagetitle" style="margin: 0px; padding: 0px; text-decoration: none;"><span class="pagetitle" style="margin: 0px; padding: 0px; text-decoration: none;"></span></span>&nbsp;</p>
<p><span class="pagetitle" style="margin: 0px; padding: 0px; text-decoration: none;"><span class="pagetitle" style="margin: 0px; padding: 0px; text-decoration: none;"><span class="pagetitle" style="margin: 0px; padding: 0px; text-decoration: none;">7.关于Hibernate2的使用资料：</span></span></span></p>
<p><span class="pagetitle" style="margin: 0px; padding: 0px; text-decoration: none;"><span class="pagetitle" style="margin: 0px; padding: 0px; text-decoration: none;"><span class="pagetitle" style="margin: 0px; padding: 0px; text-decoration: none;"><a href="http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=833">http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=833</a></span></span></span></p>
<img src ="http://www.blogjava.net/super2/aggbug/237464.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/super2/" target="_blank">淘声依旧</a> 2008-10-29 19:43 <a href="http://www.blogjava.net/super2/archive/2008/10/29/237464.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hibernate3学习笔记(二十一)｜二级缓存</title><link>http://www.blogjava.net/super2/archive/2008/10/29/237461.html</link><dc:creator>淘声依旧</dc:creator><author>淘声依旧</author><pubDate>Wed, 29 Oct 2008 11:42:00 GMT</pubDate><guid>http://www.blogjava.net/super2/archive/2008/10/29/237461.html</guid><wfw:comment>http://www.blogjava.net/super2/comments/237461.html</wfw:comment><comments>http://www.blogjava.net/super2/archive/2008/10/29/237461.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/super2/comments/commentRss/237461.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/super2/services/trackbacks/237461.html</trackback:ping><description><![CDATA[二级缓存及外部缓存，它能够越过数个Session，通过同一个SessionFactory进行管理和维护。
<p>要使用二级缓存，首先需要对hibernate.cfg.xml文件进行修改：</p>
<div class="highlighter">
<ol class="highlighter-xml">
    <li><span class="tag">&lt;?</span><span class="tag-name">xml</span><span>&nbsp;</span><span class="attribute">version</span><span>=</span><span class="attribute-value">"1.0"</span><span>&nbsp;</span><span class="attribute">encoding</span><span>=</span><span class="attribute-value">"utf-8"</span><span class="tag">?&gt;</span><span>&nbsp;</span></li>
    <li class="alt"><span class="tag">&lt;!DOCTYPE&nbsp;hibernate-configuration&nbsp;PUBLIC</span></li>
    <li><span class="tag">&nbsp;&nbsp;&nbsp;&nbsp;"-//Hibernate/Hibernate&nbsp;Configuration&nbsp;DTD&nbsp;3.0//EN"</span></li>
    <li class="alt"><span class="tag">&nbsp;&nbsp;&nbsp;&nbsp;"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"&gt;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="tag">&lt;</span><span class="tag-name">hibernate-configuration</span><span class="tag">&gt;</span><span>&nbsp;</span></li>
    <li><br />
    </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">session-factory</span><span class="tag">&gt;</span><span>&nbsp;</span></li>
    <li><br />
    </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;....</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">property</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"hibernate.cache.provider_class"</span><span class="tag">&gt;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong>org.hibernate.cache.HashtableCacheProvider</strong></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">property</span><span class="tag">&gt;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;....</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">session-factory</span><span class="tag">&gt;</span><span>&nbsp;</span></li>
    <li><br />
    </li>
    <li class="alt"><span class="tag">&lt;/</span><span class="tag-name">hibernate-configuration</span><span class="tag">&gt;</span></li>
</ol>
</div>
<p>HashtableCache是Hibernate自己所提供的二级缓存的实现，但是由于其性能和功能有限，一般只用于开发和测试。</p>
<p>当然我们可以使用第三方的实现，譬如：org.hibernate.cache.EhCacheProvider，这个需要ehcathe.jar包。</p>
<p>修改User.hbm.xml文件：</p>
<div class="highlighter">
<ol class="highlighter-xml">
    <li><span class="tag">&lt;?</span><span class="tag-name">xml</span><span>&nbsp;</span><span class="attribute">version</span><span>=</span><span class="attribute-value">"1.0"</span><span>&nbsp;</span><span class="attribute">encoding</span><span>=</span><span class="attribute-value">"utf-8"</span><span class="tag">?&gt;</span></li>
    <li class="alt"><span class="tag">&lt;!DOCTYPE&nbsp;hibernate-mapping&nbsp;</span></li>
    <li><span class="tag">&nbsp;&nbsp;&nbsp;&nbsp;PUBLIC&nbsp;"-//Hibernate/Hibernate&nbsp;Mapping&nbsp;DTD&nbsp;3.0//EN"&nbsp;</span></li>
    <li class="alt"><span class="tag">&nbsp;&nbsp;&nbsp;&nbsp;"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"&gt;</span></li>
    <li><br />
    </li>
    <li class="alt"><span class="tag">&lt;</span><span class="tag-name">hibernate-mapping</span><span class="tag">&gt;</span><span>&nbsp;</span></li>
    <li><br />
    </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">class</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"com.hb3.pack_21.model.User"</span><span>&nbsp;</span><span class="attribute">table</span><span>=</span><span class="attribute-value">"user"</span><span class="tag">&gt;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong>&nbsp;&nbsp;</strong></span><span class="tag">&lt;</span><span class="tag-name">cache</span><strong><span>&nbsp;</span><span class="attribute">usage</span><span>=</span><span class="attribute-value">"read-write"</span><span class="tag">/&gt;</span></strong></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">id</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"id"</span><span>&nbsp;</span><span class="attribute">column</span><span>=</span><span class="attribute-value">"id"</span><span>&nbsp;</span><span class="attribute">type</span><span>=</span><span class="attribute-value">"java.lang.Integer"</span><span class="tag">&gt;</span><span>&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">generator</span><span>&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">"native"</span><span class="tag">/&gt;</span><span>&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">id</span><span class="tag">&gt;</span><span>&nbsp;</span></li>
    <li><br />
    </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">property</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"name"</span><span>&nbsp;</span><span class="attribute">column</span><span>=</span><span class="attribute-value">"name"</span><span>&nbsp;</span><span class="attribute">type</span><span>=</span><span class="attribute-value">"java.lang.String"</span><span class="tag">/&gt;</span><span>&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">many-to-one</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"room"</span><span>&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">column</span><span>=</span><span class="attribute-value">"room_id"</span><span>&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">"com.hb3.pack_21.model.Room"</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">cascade</span><span>=</span><span class="attribute-value">"save-update"</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">outer-join</span><span>=</span><span class="attribute-value">"true"</span><span class="tag">/&gt;</span><span>&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">class</span><span class="tag">&gt;</span><span>&nbsp;</span></li>
    <li><br />
    </li>
    <li class="alt"><span class="tag">&lt;/</span><span class="tag-name">hibernate-mapping</span><span class="tag">&gt;</span></li>
</ol>
</div>
<p>这里追加的策略有read-only、read-write、nonstrict-read-write以及transactional。不同的第三方缓存实现所支持的种类是不同的，请参阅：<a href="http://www.hibernate.org/hib_docs/v3/reference/en/html/performance.html#performance-cache">http://www.hibernate.org/hib_docs/v3/reference/en/html/performance.html#performance-cache</a></p>
<p>&nbsp;</p>
<p>在工程的classpath下追加ehcache.xml文件，内容为：</p>
<div class="highlighter">
<ol class="highlighter-xml">
    <li><span class="tag">&lt;</span><span class="tag-name">ehcache</span><span class="tag">&gt;</span></li>
    <li class="alt"><br />
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">diskStore</span><span>&nbsp;</span><span class="attribute">path</span><span>=</span><span class="attribute-value">"java.io.tmpdir"</span><span class="tag">/&gt;</span></li>
    <li class="alt"><br />
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">defaultCache</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">maxElementsInMemory</span><span>=</span><span class="attribute-value">"10000"</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">eternal</span><span>=</span><span class="attribute-value">"false"</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">timeToIdleSeconds</span><span>=</span><span class="attribute-value">"120"</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">timeToLiveSeconds</span><span>=</span><span class="attribute-value">"120"</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">overflowToDisk</span><span>=</span><span class="attribute-value">"true"</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">/&gt;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span class="tag">&lt;/</span><span class="tag-name">ehcache</span><span class="tag">&gt;</span></li>
</ol>
</div>
<p>测试代码如下：</p>
<div class="highlighter">
<ol class="highlighter-j">
    <li><span class="keyword">package</span><span>&nbsp;com.hb3.pack_21;</span></li>
    <li class="alt"><br />
    </li>
    <li><span class="keyword">import</span><span>&nbsp;java.io.IOException;</span></li>
    <li class="alt"><span class="keyword">import</span><span>&nbsp;java.sql.SQLException;</span></li>
    <li><br />
    </li>
    <li class="alt"><span class="keyword">import</span><span>&nbsp;org.hibernate.Session;</span></li>
    <li><span class="keyword">import</span><span>&nbsp;org.hibernate.SessionFactory;</span></li>
    <li class="alt"><span class="keyword">import</span><span>&nbsp;org.hibernate.cfg.Configuration;</span></li>
    <li><br />
    </li>
    <li class="alt"><span class="keyword">import</span><span>&nbsp;com.hb3.pack_21.model.User;</span></li>
    <li><br />
    </li>
    <li class="alt"><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;BusinessService&nbsp;{</span></li>
    <li><br />
    </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;main(String[]&nbsp;args)&nbsp;</span><span class="keyword">throws</span><span>&nbsp;IOException,&nbsp;SQLException&nbsp;{</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Configuration&nbsp;config&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;Configuration().configure();</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SessionFactory&nbsp;sessionFactory&nbsp;=&nbsp;config.buildSessionFactory();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Session&nbsp;session&nbsp;=&nbsp;sessionFactory.openSession();</span></li>
    <li><br />
    </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;User&nbsp;user1&nbsp;=&nbsp;(User)&nbsp;session.load(User.</span><span class="keyword">class</span><span>,&nbsp;</span><span class="keyword">new</span><span>&nbsp;Integer(</span><span class="number">1</span><span>));</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;user1.getName();</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session.close();</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session&nbsp;=&nbsp;sessionFactory.openSession();</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;User&nbsp;user2&nbsp;=&nbsp;(User)&nbsp;session.load(User.</span><span class="keyword">class</span><span>,&nbsp;</span><span class="keyword">new</span><span>&nbsp;Integer(</span><span class="number">1</span><span>));</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;user2.getName();</span></li>
    <li><br />
    </li>
    <li class="alt"><br />
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session.close();</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sessionFactory.close();</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li class="alt"><span>}</span></li>
</ol>
</div>
<p>如果不使用二级缓存机制，生成的SQL文为：</p>
<p>Hibernate: <br />
select user0_.id as id0_, user0_.name as name0_0_, user0_.age as age0_0_ <br />
from user user0_ where user0_.id=?<br />
Hibernate: <br />
select user0_.id as id0_, user0_.name as name0_0_, user0_.age as age0_0_ <br />
from user user0_ where user0_.id=?</p>
<p>&nbsp;</p>
<p>使用后，第二级做相同的查询会从二级缓存中读取。</p>
<p>当然，如果打算从二级缓存中清空对象的缓存信息，可以使用SessionFactory的evict()方法，如：</p>
<p><strong>sessionFactory.evict(User.class, user.getId());</strong></p>
<img src ="http://www.blogjava.net/super2/aggbug/237461.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/super2/" target="_blank">淘声依旧</a> 2008-10-29 19:42 <a href="http://www.blogjava.net/super2/archive/2008/10/29/237461.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hibernate3学习笔记(二十二)｜Query缓存机制</title><link>http://www.blogjava.net/super2/archive/2008/10/29/237463.html</link><dc:creator>淘声依旧</dc:creator><author>淘声依旧</author><pubDate>Wed, 29 Oct 2008 11:42:00 GMT</pubDate><guid>http://www.blogjava.net/super2/archive/2008/10/29/237463.html</guid><wfw:comment>http://www.blogjava.net/super2/comments/237463.html</wfw:comment><comments>http://www.blogjava.net/super2/archive/2008/10/29/237463.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/super2/comments/commentRss/237463.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/super2/services/trackbacks/237463.html</trackback:ping><description><![CDATA[<p>测试代码如下：</p>
<div class="highlighter">
<ol class="highlighter-j">
    <li><span class="keyword">package</span><span>&nbsp;com.hb3.pack_22;</span></li>
    <li class="alt"><br />
    </li>
    <li><span class="keyword">import</span><span>&nbsp;java.io.IOException;</span></li>
    <li class="alt"><span class="keyword">import</span><span>&nbsp;java.sql.SQLException;</span></li>
    <li><span class="keyword">import</span><span>&nbsp;java.util.List;</span></li>
    <li class="alt"><br />
    </li>
    <li><span class="keyword">import</span><span>&nbsp;org.hibernate.Query;</span></li>
    <li class="alt"><span class="keyword">import</span><span>&nbsp;org.hibernate.Session;</span></li>
    <li><span class="keyword">import</span><span>&nbsp;org.hibernate.SessionFactory;</span></li>
    <li class="alt"><span class="keyword">import</span><span>&nbsp;org.hibernate.cfg.Configuration;</span></li>
    <li><br />
    </li>
    <li class="alt"><span class="keyword">import</span><span>&nbsp;com.hb3.pack_22.model.User;</span></li>
    <li><br />
    </li>
    <li class="alt"><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;BusinessService&nbsp;{</span></li>
    <li><br />
    </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;main(String[]&nbsp;args)&nbsp;</span><span class="keyword">throws</span><span>&nbsp;IOException,&nbsp;SQLException&nbsp;{</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Configuration&nbsp;config&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;Configuration().configure();</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SessionFactory&nbsp;sessionFactory&nbsp;=&nbsp;config.buildSessionFactory();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Session&nbsp;session&nbsp;=&nbsp;sessionFactory.openSession();</span></li>
    <li><br />
    </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;hql&nbsp;=&nbsp;</span><span class="string">"from&nbsp;com.hb3.pack_22.model.User"</span><span>;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Query&nbsp;query&nbsp;=&nbsp;session.createQuery(hql);</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List&lt;?&gt;&nbsp;users&nbsp;=&nbsp;query.list();</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">for</span><span>(</span><span class="keyword">int</span><span>&nbsp;i&nbsp;=&nbsp;</span><span class="number">0</span><span>;&nbsp;i&nbsp;&lt;&nbsp;users.size();&nbsp;i++)&nbsp;{</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;User&nbsp;user&nbsp;=&nbsp;(User)&nbsp;users.get(i);</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(user.getName());</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;query&nbsp;=&nbsp;session.createQuery(hql);</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;users&nbsp;=&nbsp;query.list();</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">for</span><span>(</span><span class="keyword">int</span><span>&nbsp;i&nbsp;=&nbsp;</span><span class="number">0</span><span>;&nbsp;i&nbsp;&lt;&nbsp;users.size();&nbsp;i++)&nbsp;{</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;User&nbsp;user&nbsp;=&nbsp;(User)&nbsp;users.get(i);</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(user.getName());</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li class="alt"><br />
    </li>
    <li><br />
    </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session.close();</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sessionFactory.close();</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li><span>}</span></li>
</ol>
</div>
<p>执行的结果为：</p>
<p>Hibernate: select user0_.id as id0_, user0_.name as name0_, user0_.room_id as room3_0_ from user user0_<br />
chenyan<br />
shenbin<br />
Hibernate: select user0_.id as id0_, user0_.name as name0_, user0_.room_id as room3_0_ from user user0_<br />
chenyan<br />
shenbin</p>
<p>&nbsp;</p>
<p>可见，没有启用Query的快取功能。</p>
<p>如果打算打开Query的快取功能，首先在hibernate.cfg.xml中设定hibernate.cache.use_query_cache属性：</p>
<div class="highlighter">
<ol class="highlighter-xml">
    <li><span class="tag">&lt;?</span><span class="tag-name">xml</span><span>&nbsp;</span><span class="attribute">version</span><span>=</span><span class="attribute-value">"1.0"</span><span>&nbsp;</span><span class="attribute">encoding</span><span>=</span><span class="attribute-value">"utf-8"</span><span class="tag">?&gt;</span><span>&nbsp;</span></li>
    <li class="alt"><span class="tag">&lt;!DOCTYPE&nbsp;hibernate-configuration&nbsp;PUBLIC</span></li>
    <li><span class="tag">&nbsp;&nbsp;&nbsp;&nbsp;"-//Hibernate/Hibernate&nbsp;Configuration&nbsp;DTD&nbsp;3.0//EN"</span></li>
    <li class="alt"><span class="tag">&nbsp;&nbsp;&nbsp;&nbsp;"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"&gt;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="tag">&lt;</span><span class="tag-name">hibernate-configuration</span><span class="tag">&gt;</span><span>&nbsp;</span></li>
    <li><br />
    </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">session-factory</span><span class="tag">&gt;</span><span>&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;....&nbsp;</span></li>
    <li class="alt"><br />
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">property</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"hibernate.cache.use_query_cache"</span><span class="tag">&gt;</span><span>true</span><span class="tag">&lt;/</span><span class="tag-name">property</span><span class="tag">&gt;</span><span>&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;....</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">session-factory</span><span class="tag">&gt;</span><span>&nbsp;</span></li>
    <li><br />
    </li>
    <li class="alt"><span class="tag">&lt;/</span><span class="tag-name">hibernate-configuration</span><span class="tag">&gt;</span></li>
</ol>
</div>
<p>然后在每次简历Query时，执行setCacheable(true)：</p>
<div class="highlighter">
<ol class="highlighter-j">
    <li><span class="keyword">package</span><span>&nbsp;com.hb3.pack_22;</span></li>
    <li class="alt"><br />
    </li>
    <li><span class="keyword">import</span><span>&nbsp;java.io.IOException;</span></li>
    <li class="alt"><span class="keyword">import</span><span>&nbsp;java.sql.SQLException;</span></li>
    <li><span class="keyword">import</span><span>&nbsp;java.util.List;</span></li>
    <li class="alt"><br />
    </li>
    <li><span class="keyword">import</span><span>&nbsp;org.hibernate.Query;</span></li>
    <li class="alt"><span class="keyword">import</span><span>&nbsp;org.hibernate.Session;</span></li>
    <li><span class="keyword">import</span><span>&nbsp;org.hibernate.SessionFactory;</span></li>
    <li class="alt"><span class="keyword">import</span><span>&nbsp;org.hibernate.cfg.Configuration;</span></li>
    <li><br />
    </li>
    <li class="alt"><span class="keyword">import</span><span>&nbsp;com.hb3.pack_22.model.User;</span></li>
    <li><br />
    </li>
    <li class="alt"><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;BusinessService&nbsp;{</span></li>
    <li><br />
    </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;main(String[]&nbsp;args)&nbsp;</span><span class="keyword">throws</span><span>&nbsp;IOException,&nbsp;SQLException&nbsp;{</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Configuration&nbsp;config&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;Configuration().configure();</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SessionFactory&nbsp;sessionFactory&nbsp;=&nbsp;config.buildSessionFactory();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Session&nbsp;session&nbsp;=&nbsp;sessionFactory.openSession();</span></li>
    <li><br />
    </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;hql&nbsp;=&nbsp;</span><span class="string">"from&nbsp;com.hb3.pack_22.model.User"</span><span>;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Query&nbsp;query&nbsp;=&nbsp;session.createQuery(hql);</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//使用Query快取 </span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong>query.setCacheable(</strong></span><span class="keyword">true</span><span><strong>);</strong></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List&lt;?&gt;&nbsp;users&nbsp;=&nbsp;query.list();</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">for</span><span>(</span><span class="keyword">int</span><span>&nbsp;i&nbsp;=&nbsp;</span><span class="number">0</span><span>;&nbsp;i&nbsp;&lt;&nbsp;users.size();&nbsp;i++)&nbsp;{</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;User&nbsp;user&nbsp;=&nbsp;(User)&nbsp;users.get(i);</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(user.getName());</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;query&nbsp;=&nbsp;session.createQuery(hql);</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//使用Query快取 </span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong>query.setCacheable(</strong></span><span class="keyword">true</span><span><strong>);</strong></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;users&nbsp;=&nbsp;query.list();</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">for</span><span>(</span><span class="keyword">int</span><span>&nbsp;i&nbsp;=&nbsp;</span><span class="number">0</span><span>;&nbsp;i&nbsp;&lt;&nbsp;users.size();&nbsp;i++)&nbsp;{</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;User&nbsp;user&nbsp;=&nbsp;(User)&nbsp;users.get(i);</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(user.getName());</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li class="alt"><br />
    </li>
    <li><br />
    </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session.close();</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sessionFactory.close();</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li><span>}</span></li>
</ol>
</div>
<p>执行结果为：</p>
<p>Hibernate: select user0_.id as id0_, user0_.name as name0_, user0_.room_id as room3_0_ from user user0_<br />
chenyan<br />
shenbin<br />
chenyan<br />
shenbin</p>
<p>&nbsp;</p>
<p>其实，Hibernate在启用Query的缓存机制后，会保留执行过的查询SQL和查询结果，在下次查询后会看看SQL是否相同，并看看对应的资
料库表格是否有变动(Update/Delete/Insert),如果SQL相同且且资料库也没有变动则将缓存中的结果直接返回。</p>
<p>&nbsp;</p>
<p>值得一提的是，Query上有list()与iterator()2个方法用于结果集返回。他们的区别是，list()方法在读取数据库时不会使用缓存机制而直接向数据库发起查询，而iterator()则会将读取到的结果写到缓存中，以便于读取时再次利用。</p>
<div class="highlighter">
<ol class="highlighter-j">
    <li><span>Session&nbsp;session&nbsp;=&nbsp;sessionFactory.openSession();</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>Query&nbsp;query&nbsp;=&nbsp;session.createQuery(</span><span class="string">"from&nbsp;User"</span><span>);</span></li>
    <li class="alt"><span>List&nbsp;users&nbsp;=&nbsp;query.list();</span></li>
    <li><span>users&nbsp;=&nbsp;query.list();</span></li>
    <li class="alt"><br />
    </li>
    <li><span>session.close();</span></li>
</ol>
</div>
<p>执行结果：</p>
<p>Hibernate: select user0_.id as id, user0_.name as name0_, user0_.age as age0_ from user user0_<br />
Hibernate: select user0_.id as id, user0_.name as name0_, user0_.age as age0_ from user user0_</p>
<div class="highlighter">
<ol class="highlighter-j">
    <li><span>Session&nbsp;session&nbsp;=&nbsp;sessionFactory.openSession();</span></li>
    <li class="alt"><br />
    </li>
    <li><span>Query&nbsp;query&nbsp;=&nbsp;session.createQuery(</span><span class="string">"from&nbsp;User"</span><span>);</span></li>
    <li class="alt"><span>Iterator&nbsp;users&nbsp;=&nbsp;query.iterate();</span></li>
    <li><span>users&nbsp;=&nbsp;query.iterate();</span></li>
    <li class="alt"><br />
    </li>
    <li><span>session.close();</span></li>
</ol>
</div>
<p>执行结果：</p>
<p>Hibernate: select user0_.id as col_0_0_ from user user0_</p>
<p>Hibernate: select user0_.id as col_0_0_ from user user0_</p>
<p>&nbsp;</p>
<p>由于使用iterator()方法时会使用到Session level缓存，所以在查询大量记录时会好用大量的记忆体。必要时可以使用Session的evict()或clear()方法来清除缓存。</p>
<p>请参阅：<a href="http://blogger.org.cn/blog/more.asp?name=NaddyLee&amp;id=31540">http://blogger.org.cn/blog/more.asp?name=NaddyLee&amp;id=31540</a></p>
<p>请注意，尽管iterator()方法时会使用到Session level缓存,但这不能就说在任何情况下都是最有效率的做法。</p>
<p>请看下面的测试：</p>
<div class="highlighter">
<ol class="highlighter-j">
    <li><span class="keyword">package</span><span>&nbsp;com.hb3.pack_22;</span></li>
    <li class="alt"><br />
    </li>
    <li><span class="keyword">import</span><span>&nbsp;java.io.IOException;</span></li>
    <li class="alt"><span class="keyword">import</span><span>&nbsp;java.sql.SQLException;</span></li>
    <li><span class="keyword">import</span><span>&nbsp;java.util.Iterator;</span></li>
    <li class="alt"><span class="keyword">import</span><span>&nbsp;java.util.List;</span></li>
    <li><br />
    </li>
    <li class="alt"><span class="keyword">import</span><span>&nbsp;org.hibernate.Query;</span></li>
    <li><span class="keyword">import</span><span>&nbsp;org.hibernate.Session;</span></li>
    <li class="alt"><span class="keyword">import</span><span>&nbsp;org.hibernate.SessionFactory;</span></li>
    <li><span class="keyword">import</span><span>&nbsp;org.hibernate.cfg.Configuration;</span></li>
    <li class="alt"><br />
    </li>
    <li><span class="keyword">import</span><span>&nbsp;com.hb3.pack_22.model.User;</span></li>
    <li class="alt"><br />
    </li>
    <li><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;BusinessService&nbsp;{</span></li>
    <li class="alt"><br />
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;main(String[]&nbsp;args)&nbsp;</span><span class="keyword">throws</span><span>&nbsp;IOException,&nbsp;SQLException&nbsp;{</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Configuration&nbsp;config&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;Configuration().configure();</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SessionFactory&nbsp;sessionFactory&nbsp;=&nbsp;config.buildSessionFactory();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Session&nbsp;session&nbsp;=&nbsp;sessionFactory.openSession();</span></li>
    <li class="alt"><br />
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;hql&nbsp;=&nbsp;</span><span class="string">"from&nbsp;com.hb3.pack_22.model.User"</span><span>;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Query&nbsp;query&nbsp;=&nbsp;session.createQuery(hql);</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="comment">//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List&lt;?&gt;&nbsp;list&nbsp;=&nbsp;query.list(); </span></li>
    <li><span class="comment">//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Iterator&lt;?&gt;&nbsp;iterator&nbsp;=&nbsp;list.iterator(); </span></li>
    <li class="alt"><span class="comment">//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(iterator.hasNext())&nbsp;{ </span></li>
    <li><span class="comment">//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;User&nbsp;user&nbsp;=&nbsp;(User)iterator.next(); </span></li>
    <li class="alt"><span class="comment">//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(user.getRoom().getAddress()); </span></li>
    <li><span class="comment">//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} </span></li>
    <li class="alt"><span class="comment">//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("====================================="); </span></li>
    <li><span class="comment">//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;list&nbsp;=&nbsp;query.list(); </span></li>
    <li class="alt"><span class="comment">//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iterator&nbsp;=&nbsp;list.iterator(); </span></li>
    <li><span class="comment">//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(iterator.hasNext())&nbsp;{ </span></li>
    <li class="alt"><span class="comment">//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;User&nbsp;user&nbsp;=&nbsp;(User)iterator.next(); </span></li>
    <li><span class="comment">//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(user.getRoom().getAddress()); </span></li>
    <li class="alt"><span class="comment">//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} </span></li>
    <li><span class="comment">//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></li>
    <li class="alt"><span class="comment">//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("++++++++++++++++++++++++++++++++++++++"); </span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;query&nbsp;=&nbsp;session.createQuery(hql);</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Iterator&lt;?&gt;&nbsp;iterator&nbsp;=&nbsp;query.iterate();</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">while</span><span>&nbsp;(iterator.hasNext())&nbsp;{</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;User&nbsp;user&nbsp;=&nbsp;(User)iterator.next();</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(user.getName());</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span class="string">"====================================="</span><span>);</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iterator&nbsp;=&nbsp;query.iterate();</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">while</span><span>&nbsp;(iterator.hasNext())&nbsp;{</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;User&nbsp;user&nbsp;=&nbsp;(User)iterator.next();</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(user.getName());</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session.close();</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sessionFactory.close();</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li class="alt"><span>}</span></li>
</ol>
</div>
<p class="alt"><span><font color="#000000">执行结果：</font></span></p>
<p class="alt"><span>Hibernate: select user0_.id as col_0_0_ from user user0_<br />
Hibernate:
select user0_.id as id0_1_, user0_.name as name0_1_, user0_.room_id as
room3_0_1_, room1_.id as id1_0_, room1_.address as address1_0_ from
user user0_ left outer join room room1_ on user0_.room_id=room1_.id
where user0_.id=?<br />
chenyan<br />
Hibernate: select user0_.id as id0_1_,
user0_.name as name0_1_, user0_.room_id as room3_0_1_, room1_.id as
id1_0_, room1_.address as address1_0_ from user user0_ left outer join
room room1_ on user0_.room_id=room1_.id where user0_.id=?<br />
shenbin<br />
=====================================<br />
Hibernate: select user0_.id as col_0_0_ from user user0_<br />
chenyan<br />
shenbin<br />
</span></p>
<p class="alt"><span>看见，Iterator中的元素并不是一次性返回的，而是一条一条返回的。当数据量庞大时，特性就会下降。</span></p>
<p class="alt"><span>再看下面的测试代码：</span></p>
<span>
<div class="highlighter">
<ol class="highlighter-j">
    <li><span class="keyword">package</span><span>&nbsp;com.hb3.pack_22;</span></li>
    <li class="alt"><br />
    </li>
    <li><span class="keyword">import</span><span>&nbsp;java.io.IOException;</span></li>
    <li class="alt"><span class="keyword">import</span><span>&nbsp;java.sql.SQLException;</span></li>
    <li><span class="keyword">import</span><span>&nbsp;java.util.Iterator;</span></li>
    <li class="alt"><span class="keyword">import</span><span>&nbsp;java.util.List;</span></li>
    <li><br />
    </li>
    <li class="alt"><span class="keyword">import</span><span>&nbsp;org.hibernate.Query;</span></li>
    <li><span class="keyword">import</span><span>&nbsp;org.hibernate.Session;</span></li>
    <li class="alt"><span class="keyword">import</span><span>&nbsp;org.hibernate.SessionFactory;</span></li>
    <li><span class="keyword">import</span><span>&nbsp;org.hibernate.cfg.Configuration;</span></li>
    <li class="alt"><br />
    </li>
    <li><span class="keyword">import</span><span>&nbsp;com.hb3.pack_22.model.User;</span></li>
    <li class="alt"><br />
    </li>
    <li><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;BusinessService&nbsp;{</span></li>
    <li class="alt"><br />
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;main(String[]&nbsp;args)&nbsp;</span><span class="keyword">throws</span><span>&nbsp;IOException,&nbsp;SQLException&nbsp;{</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Configuration&nbsp;config&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;Configuration().configure();</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SessionFactory&nbsp;sessionFactory&nbsp;=&nbsp;config.buildSessionFactory();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Session&nbsp;session&nbsp;=&nbsp;sessionFactory.openSession();</span></li>
    <li class="alt"><br />
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;hql&nbsp;=&nbsp;</span><span class="string">"from&nbsp;com.hb3.pack_22.model.User"</span><span>;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Query&nbsp;query&nbsp;=&nbsp;session.createQuery(hql);</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List&lt;?&gt;&nbsp;list&nbsp;=&nbsp;query.list();</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Iterator&lt;?&gt;&nbsp;iterator&nbsp;=&nbsp;list.iterator();</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">while</span><span>&nbsp;(iterator.hasNext())&nbsp;{</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;User&nbsp;user&nbsp;=&nbsp;(User)iterator.next();</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(user.getRoom().getAddress());</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li class="alt"><span class="comment">//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("====================================="); </span></li>
    <li><span class="comment">//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;list&nbsp;=&nbsp;query.list(); </span></li>
    <li class="alt"><span class="comment">//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iterator&nbsp;=&nbsp;list.iterator(); </span></li>
    <li><span class="comment">//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(iterator.hasNext())&nbsp;{ </span></li>
    <li class="alt"><span class="comment">//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;User&nbsp;user&nbsp;=&nbsp;(User)iterator.next(); </span></li>
    <li><span class="comment">//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(user.getRoom().getAddress()); </span></li>
    <li class="alt"><span class="comment">//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} </span></li>
    <li><span class="comment">//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></li>
    <li class="alt"><span class="comment">//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("++++++++++++++++++++++++++++++++++++++"); </span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;query&nbsp;=&nbsp;session.createQuery(hql);</span></li>
    <li><span class="comment">//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Iterator&lt;?&gt;&nbsp;iterator&nbsp;=&nbsp;query.iterate(); </span></li>
    <li class="alt"><span class="comment">//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(iterator.hasNext())&nbsp;{ </span></li>
    <li><span class="comment">//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;User&nbsp;user&nbsp;=&nbsp;(User)iterator.next(); </span></li>
    <li class="alt"><span class="comment">//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(user.getName()); </span></li>
    <li><span class="comment">//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} </span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span class="string">"====================================="</span><span>);</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iterator&nbsp;=&nbsp;query.iterate();</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">while</span><span>&nbsp;(iterator.hasNext())&nbsp;{</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;User&nbsp;user&nbsp;=&nbsp;(User)iterator.next();</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(user.getName());</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session.close();</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sessionFactory.close();</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li class="alt"><span>}</span></li>
</ol>
</div>
</span>
<p class="alt"><span>执行的结果为：</span></p>
<p class="alt"><span>Hibernate: select user0_.id as id0_, user0_.name as name0_, user0_.room_id as room3_0_ from user user0_<br />
Hibernate: select room0_.id as id1_0_, room0_.address as address1_0_ from room room0_ where room0_.id=?<br />
NTU-M8-419<br />
NTU-M8-419<br />
=====================================<br />
Hibernate: select user0_.id as col_0_0_ from user user0_<br />
chenyan<br />
shenbin</span></p>
<p class="alt">&nbsp;</p>
<p class="alt"><span>这明显在性能上要优于刚才的做法。<strong>可见，首次查询使用query.list性能要优于query.iterate，之后再做相同的查询请求时，则借助缓存机制，使用query.iterate会大大提高性能。</strong></span></p>
<img src ="http://www.blogjava.net/super2/aggbug/237463.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/super2/" target="_blank">淘声依旧</a> 2008-10-29 19:42 <a href="http://www.blogjava.net/super2/archive/2008/10/29/237463.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hibernate3学习笔记(二十)｜关系映射：多对多</title><link>http://www.blogjava.net/super2/archive/2008/10/29/237460.html</link><dc:creator>淘声依旧</dc:creator><author>淘声依旧</author><pubDate>Wed, 29 Oct 2008 11:41:00 GMT</pubDate><guid>http://www.blogjava.net/super2/archive/2008/10/29/237460.html</guid><wfw:comment>http://www.blogjava.net/super2/comments/237460.html</wfw:comment><comments>http://www.blogjava.net/super2/archive/2008/10/29/237460.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/super2/comments/commentRss/237460.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/super2/services/trackbacks/237460.html</trackback:ping><description><![CDATA[要实现多对多的对应，一般可以借由一个中间表来完成。也就是借由一对多，多对一来完成。
<p><img src="http://www.javaworld.com.tw/confluence/download/attachments/3526/ManyToMany-1.jpg" align="absmiddle" border="0"  alt="" /></p>
<p>DDL：</p>
<div class="highlighter">
<ol class="highlighter-c">
    <li><span>CREATE&nbsp;TABLE&nbsp;user&nbsp;(</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;id&nbsp;INT(11)&nbsp;NOT&nbsp;NULL&nbsp;auto_increment&nbsp;PRIMARY&nbsp;KEY,</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;name&nbsp;VARCHAR(100)&nbsp;NOT&nbsp;NULL&nbsp;</span><span class="keyword">default</span><span>&nbsp;</span><span class="string">''</span></li>
    <li class="alt"><span>);</span></li>
    <li><br />
    </li>
    <li class="alt"><span>CREATE&nbsp;TABLE&nbsp;user_server&nbsp;(</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;user_id&nbsp;INT(11),</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;server_id&nbsp;INT(11)</span></li>
    <li><span>);</span></li>
    <li class="alt"><br />
    </li>
    <li><span>CREATE&nbsp;TABLE&nbsp;server&nbsp;(</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;id&nbsp;INT(11)&nbsp;NOT&nbsp;NULL&nbsp;auto_increment&nbsp;PRIMARY&nbsp;KEY,</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;address&nbsp;VARCHAR(100)&nbsp;NOT&nbsp;NULL&nbsp;</span><span class="keyword">default</span><span>&nbsp;</span><span class="string">''</span></li>
    <li class="alt"><span>);</span></li>
</ol>
</div>
<p><font color="#000000">User.java</font></p>
<div class="highlighter">
<ol class="highlighter-j">
    <li><span class="keyword">package</span><span>&nbsp;com.hb3.pack_19.model;</span></li>
    <li class="alt"><br />
    </li>
    <li><span class="keyword">import</span><span>&nbsp;java.util.Set;</span></li>
    <li class="alt"><br />
    </li>
    <li><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;User&nbsp;{</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;Integer&nbsp;id;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;String&nbsp;name;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;Set&lt;Server&gt;&nbsp;servers;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;User()&nbsp;{</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li><br />
    </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;Integer&nbsp;getId()&nbsp;{</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;id;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;setId(Integer&nbsp;id)&nbsp;{</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.id&nbsp;=&nbsp;id;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;String&nbsp;getName()&nbsp;{</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;name;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;setName(String&nbsp;name)&nbsp;{</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.name&nbsp;=&nbsp;name;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;Set&lt;Server&gt;&nbsp;getServers()&nbsp;{</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;servers;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;setServers(Set&lt;Server&gt;&nbsp;servers)&nbsp;{</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.servers&nbsp;=&nbsp;servers;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li class="alt"><span>}</span></li>
</ol>
</div>
<p><font color="#000000">Server.java</font></p>
<div class="highlighter">
<ol class="highlighter-j">
    <li><span class="keyword">package</span><span>&nbsp;com.hb3.pack_19.model;</span></li>
    <li class="alt"><br />
    </li>
    <li><span class="keyword">import</span><span>&nbsp;java.util.Set;</span></li>
    <li class="alt"><br />
    </li>
    <li><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;Server&nbsp;{</span></li>
    <li class="alt"><br />
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;Integer&nbsp;id;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;String&nbsp;address;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;Set&lt;User&gt;&nbsp;users;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;String&nbsp;getAddress()&nbsp;{</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;address;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;setAddress(String&nbsp;address)&nbsp;{</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.address&nbsp;=&nbsp;address;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;Integer&nbsp;getId()&nbsp;{</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;id;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;setId(Integer&nbsp;id)&nbsp;{</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.id&nbsp;=&nbsp;id;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;Set&lt;User&gt;&nbsp;getUsers()&nbsp;{</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;users;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;setUsers(Set&lt;User&gt;&nbsp;users)&nbsp;{</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.users&nbsp;=&nbsp;users;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li><span>}</span></li>
</ol>
</div>
<p><font style="background-color: #f8f8f8;" color="#000000">Server.hbm.xml</font></p>
<div class="highlighter">
<ol class="highlighter-xml">
    <li><span class="tag">&lt;?</span><span class="tag-name">xml</span><span>&nbsp;</span><span class="attribute">version</span><span>=</span><span class="attribute-value">"1.0"</span><span>&nbsp;</span><span class="attribute">encoding</span><span>=</span><span class="attribute-value">"UTF-8"</span><span class="tag">?&gt;</span></li>
    <li class="alt"><br />
    </li>
    <li><span class="tag">&lt;!DOCTYPE&nbsp;hibernate-mapping&nbsp;PUBLIC</span></li>
    <li class="alt"><span class="tag">&nbsp;&nbsp;&nbsp;&nbsp;"-//Hibernate/Hibernate&nbsp;Mapping&nbsp;DTD&nbsp;3.0//EN"&nbsp;</span></li>
    <li><span class="tag">&nbsp;&nbsp;&nbsp;&nbsp;"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"&gt;</span></li>
    <li class="alt"><br />
    </li>
    <li><span class="tag">&lt;</span><span class="tag-name">hibernate-mapping</span><span class="tag">&gt;</span><span>&nbsp;</span></li>
    <li class="alt"><br />
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">class</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"com.hb3.pack_19.model.Server"</span><span>&nbsp;</span><span class="attribute">table</span><span>=</span><span class="attribute-value">"server"</span><span class="tag">&gt;</span><span>&nbsp;</span></li>
    <li class="alt"><br />
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">id</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"id"</span><span>&nbsp;</span><span class="attribute">column</span><span>=</span><span class="attribute-value">"id"</span><span class="tag">&gt;</span><span>&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">generator</span><span>&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">"native"</span><span class="tag">/&gt;</span><span>&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">id</span><span class="tag">&gt;</span><span>&nbsp;</span></li>
    <li class="alt"><br />
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">property</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"address"</span><span>&nbsp;</span><span class="attribute">type</span><span>=</span><span class="attribute-value">"java.lang.String"</span><span class="tag">/&gt;</span><span>&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">set</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"users"</span><span>&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">table</span><span>=</span><span class="attribute-value">"user_server"</span><span>&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">inverse</span><span>=</span><span class="attribute-value">"true"</span><span>&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">cascade</span><span>=</span><span class="attribute-value">"save-update"</span><span class="tag">&gt;</span><span>&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">key</span><span>&nbsp;</span><span class="attribute">column</span><span>=</span><span class="attribute-value">"server_id"</span><span class="tag">/&gt;</span><span>&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">many-to-many</span><span>&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">"com.hb3.pack_19.model.User"</span><span>&nbsp;</span></li>
    <li class="alt"><span>&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;</span><span class="attribute">column</span><span>=</span><span class="attribute-value">"user_id"</span><span class="tag">/&gt;</span><span>&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">set</span><span class="tag">&gt;</span><span>&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">class</span><span class="tag">&gt;</span><span>&nbsp;</span></li>
    <li><br />
    </li>
    <li class="alt"><span class="tag">&lt;/</span><span class="tag-name">hibernate-mapping</span><span class="tag">&gt;</span></li>
</ol>
</div>
<p><font color="#000000">User.hbm.xml</font></p>
<div class="highlighter">
<ol class="highlighter-xml">
    <li><span class="tag">&lt;?</span><span class="tag-name">xml</span><span>&nbsp;</span><span class="attribute">version</span><span>=</span><span class="attribute-value">"1.0"</span><span>&nbsp;</span><span class="attribute">encoding</span><span>=</span><span class="attribute-value">"UTF-8"</span><span class="tag">?&gt;</span></li>
    <li class="alt"><br />
    </li>
    <li><span class="tag">&lt;!DOCTYPE&nbsp;hibernate-mapping&nbsp;PUBLIC</span></li>
    <li class="alt"><span class="tag">&nbsp;&nbsp;&nbsp;&nbsp;"-//Hibernate/Hibernate&nbsp;Mapping&nbsp;DTD&nbsp;3.0//EN"&nbsp;</span></li>
    <li><span class="tag">&nbsp;&nbsp;&nbsp;&nbsp;"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"&gt;</span></li>
    <li class="alt"><br />
    </li>
    <li><span class="tag">&lt;</span><span class="tag-name">hibernate-mapping</span><span class="tag">&gt;</span><span>&nbsp;</span></li>
    <li class="alt"><br />
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">class</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"com.hb3.pack_19.model.User"</span><span>&nbsp;</span><span class="attribute">table</span><span>=</span><span class="attribute-value">"user"</span><span class="tag">&gt;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">id</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"id"</span><span>&nbsp;</span><span class="attribute">column</span><span>=</span><span class="attribute-value">"id"</span><span>&nbsp;</span><span class="attribute">type</span><span>=</span><span class="attribute-value">"java.lang.Integer"</span><span class="tag">&gt;</span><span>&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">generator</span><span>&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">"native"</span><span class="tag">/&gt;</span><span>&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">id</span><span class="tag">&gt;</span><span>&nbsp;</span></li>
    <li class="alt"><br />
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">property</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"name"</span><span>&nbsp;</span><span class="attribute">column</span><span>=</span><span class="attribute-value">"name"</span><span>&nbsp;</span><span class="attribute">type</span><span>=</span><span class="attribute-value">"java.lang.String"</span><span class="tag">/&gt;</span><span>&nbsp;</span></li>
    <li class="alt"><br />
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">set</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"servers"</span><span>&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">table</span><span>=</span><span class="attribute-value">"user_server"</span><span>&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">cascade</span><span>=</span><span class="attribute-value">"save-update"</span><span class="tag">&gt;</span><span>&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">key</span><span>&nbsp;</span><span class="attribute">column</span><span>=</span><span class="attribute-value">"user_id"</span><span class="tag">/&gt;</span><span>&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">many-to-many</span><span>&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">"com.hb3.pack_19.model.Server"</span><span>&nbsp;</span></li>
    <li><span>&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;</span><span class="attribute">column</span><span>=</span><span class="attribute-value">"server_id"</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">set</span><span class="tag">&gt;</span><span>&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">class</span><span class="tag">&gt;</span><span>&nbsp;</span></li>
    <li class="alt"><br />
    </li>
    <li><span class="tag">&lt;/</span><span class="tag-name">hibernate-mapping</span><span class="tag">&gt;</span></li>
</ol>
</div>
<p>测试代码：</p>
<div class="highlighter">
<ol class="highlighter-j">
    <li><span class="keyword">package</span><span>&nbsp;com.hb3.pack_19;</span></li>
    <li class="alt"><br />
    </li>
    <li><span class="keyword">import</span><span>&nbsp;java.io.IOException;</span></li>
    <li class="alt"><span class="keyword">import</span><span>&nbsp;java.sql.SQLException;</span></li>
    <li><span class="keyword">import</span><span>&nbsp;java.util.HashSet;</span></li>
    <li class="alt"><br />
    </li>
    <li><span class="keyword">import</span><span>&nbsp;org.hibernate.Session;</span></li>
    <li class="alt"><span class="keyword">import</span><span>&nbsp;org.hibernate.SessionFactory;</span></li>
    <li><span class="keyword">import</span><span>&nbsp;org.hibernate.Transaction;</span></li>
    <li class="alt"><span class="keyword">import</span><span>&nbsp;org.hibernate.cfg.Configuration;</span></li>
    <li><br />
    </li>
    <li class="alt"><span class="keyword">import</span><span>&nbsp;com.hb3.pack_19.model.Server;</span></li>
    <li><span class="keyword">import</span><span>&nbsp;com.hb3.pack_19.model.User;</span></li>
    <li class="alt"><br />
    </li>
    <li><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;BusinessService&nbsp;{</span></li>
    <li class="alt"><br />
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;main(String[]&nbsp;args)&nbsp;</span><span class="keyword">throws</span><span>&nbsp;IOException,&nbsp;SQLException&nbsp;{</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Configuration&nbsp;config&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;Configuration().configure();</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SessionFactory&nbsp;sessionFactory&nbsp;=&nbsp;config.buildSessionFactory();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Session&nbsp;session&nbsp;=&nbsp;sessionFactory.openSession();</span></li>
    <li class="alt"><br />
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Server&nbsp;server1&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;Server();</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;server1.setAddress(</span><span class="string">"PC-219"</span><span>);&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;server1.setUsers(</span><span class="keyword">new</span><span>&nbsp;HashSet&lt;User&gt;());</span></li>
    <li><br />
    </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Server&nbsp;server2&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;Server();&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;server2.setAddress(</span><span class="string">"PC-220"</span><span>);&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;server2.setUsers(</span><span class="keyword">new</span><span>&nbsp;HashSet&lt;User&gt;());</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Server&nbsp;server3&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;Server();&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;server3.setAddress(</span><span class="string">"PC-221"</span><span>);</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;server3.setUsers(</span><span class="keyword">new</span><span>&nbsp;HashSet&lt;User&gt;());</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;User&nbsp;user1&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;User();&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;user1.setName(</span><span class="string">"shenbin"</span><span>);</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;user1.setServers(</span><span class="keyword">new</span><span>&nbsp;HashSet&lt;Server&gt;());</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;User&nbsp;user2&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;User();&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;user2.setName(</span><span class="string">"chenyan"</span><span>);</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;user2.setServers(</span><span class="keyword">new</span><span>&nbsp;HashSet&lt;Server&gt;());</span></li>
    <li><br />
    </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;user1.getServers().add(server1);&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;user1.getServers().add(server2);&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;user1.getServers().add(server3);&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;server1.getUsers().add(user1);&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;server2.getUsers().add(user1);&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;server3.getUsers().add(user1);&nbsp;</span></li>
    <li class="alt"><br />
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;user2.getServers().add(server1);&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;user2.getServers().add(server3);&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;server1.getUsers().add(user2);&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;server3.getUsers().add(user2);&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Transaction&nbsp;tx=&nbsp;session.beginTransaction();&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session.save(user1);&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session.save(user2);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tx.commit();</span></li>
    <li class="alt"><br />
    </li>
    <li><br />
    </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session.close();</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sessionFactory.close();</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li><span>}</span></li>
</ol>
</div>
<p>但是，多对多映射由于使用了中介表格，查询效率不高。这不是一个很好的设计方式，应尽量避免多对多关联的设计。</p>
<img src ="http://www.blogjava.net/super2/aggbug/237460.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/super2/" target="_blank">淘声依旧</a> 2008-10-29 19:41 <a href="http://www.blogjava.net/super2/archive/2008/10/29/237460.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hibernate3学习笔记(十九)｜关系映射：一对一</title><link>http://www.blogjava.net/super2/archive/2008/10/29/237459.html</link><dc:creator>淘声依旧</dc:creator><author>淘声依旧</author><pubDate>Wed, 29 Oct 2008 11:40:00 GMT</pubDate><guid>http://www.blogjava.net/super2/archive/2008/10/29/237459.html</guid><wfw:comment>http://www.blogjava.net/super2/comments/237459.html</wfw:comment><comments>http://www.blogjava.net/super2/archive/2008/10/29/237459.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/super2/comments/commentRss/237459.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/super2/services/trackbacks/237459.html</trackback:ping><description><![CDATA[<strong>A.唯一外键关联</strong>
<p><img src="http://www.javaworld.com.tw/confluence/download/attachments/3481/OneToOneUniqueFK-1.jpg" align="absmiddle" border="0"  alt="" /></p>
<p>DDL：</p>
<div class="highlighter">
<ol class="highlighter-xml">
    <li><span>CREATE&nbsp;TABLE&nbsp;user&nbsp;(</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;id&nbsp;INT(11)&nbsp;NOT&nbsp;NULL&nbsp;auto_increment&nbsp;PRIMARY&nbsp;KEY,</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;name&nbsp;VARCHAR(100)&nbsp;NOT&nbsp;NULL&nbsp;default&nbsp;'',</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;room_id&nbsp;INT(11)</span></li>
    <li><span>);</span></li>
    <li class="alt"><br />
    </li>
    <li><span>CREATE&nbsp;TABLE&nbsp;room&nbsp;(</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;id&nbsp;INT(11)&nbsp;NOT&nbsp;NULL&nbsp;auto_increment&nbsp;PRIMARY&nbsp;KEY,</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;address&nbsp;VARCHAR(100)&nbsp;NOT&nbsp;NULL&nbsp;default&nbsp;''</span></li>
    <li class="alt"><span>);</span></li>
</ol>
</div>
<p>User.java</p>
<div class="highlighter">
<ol class="highlighter-c">
    <li><span>package&nbsp;com.hb3.pack_02.model;</span></li>
    <li class="alt"><br />
    </li>
    <li><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;User&nbsp;{</span></li>
    <li class="alt"><br />
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;Integer&nbsp;id;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;String&nbsp;name;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;Room&nbsp;room;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;User()&nbsp;{</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li><br />
    </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;Integer&nbsp;getId()&nbsp;{</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;id;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;setId(Integer&nbsp;id)&nbsp;{</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.id&nbsp;=&nbsp;id;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;String&nbsp;getName()&nbsp;{</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;name;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;setName(String&nbsp;name)&nbsp;{</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.name&nbsp;=&nbsp;name;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;Room&nbsp;getRoom()&nbsp;{</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;room;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;setRoom(Room&nbsp;room)&nbsp;{</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.room&nbsp;=&nbsp;room;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li class="alt"><span>}</span></li>
</ol>
</div>
<p>Room.java</p>
<div class="highlighter">
<ol class="highlighter-j">
    <li><span class="keyword">package</span><span>&nbsp;com.hb3.pack_02.model;</span></li>
    <li class="alt"><br />
    </li>
    <li><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;Room&nbsp;{</span></li>
    <li class="alt"><br />
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;Integer&nbsp;id;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;String&nbsp;address;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;User&nbsp;user;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;Room()&nbsp;{</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;Integer&nbsp;getId()&nbsp;{&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;id;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;setId(Integer&nbsp;id)&nbsp;{&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.id&nbsp;=&nbsp;id;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;String&nbsp;getAddress()&nbsp;{&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;address;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;setAddress(String&nbsp;address)&nbsp;{&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.address&nbsp;=&nbsp;address;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;User&nbsp;getUser()&nbsp;{</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;user;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;setUser(User&nbsp;user)&nbsp;{</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.user&nbsp;=&nbsp;user;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li class="alt"><span>}</span></li>
</ol>
</div>
<p><font color="#000000">User.hbm.xml</font></p>
<div class="highlighter">
<ol class="highlighter-xml">
    <li><span class="tag">&lt;?</span><span class="tag-name">xml</span><span>&nbsp;</span><span class="attribute">version</span><span>=</span><span class="attribute-value">"1.0"</span><span>&nbsp;</span><span class="attribute">encoding</span><span>=</span><span class="attribute-value">"UTF-8"</span><span class="tag">?&gt;</span></li>
    <li class="alt"><br />
    </li>
    <li><span class="tag">&lt;!DOCTYPE&nbsp;hibernate-mapping&nbsp;PUBLIC</span></li>
    <li class="alt"><span class="tag">&nbsp;&nbsp;&nbsp;&nbsp;"-//Hibernate/Hibernate&nbsp;Mapping&nbsp;DTD&nbsp;3.0//EN"&nbsp;</span></li>
    <li><span class="tag">&nbsp;&nbsp;&nbsp;&nbsp;"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"&gt;</span></li>
    <li class="alt"><br />
    </li>
    <li><span class="tag">&lt;</span><span class="tag-name">hibernate-mapping</span><span class="tag">&gt;</span><span>&nbsp;</span></li>
    <li class="alt"><br />
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">class</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"com.hb3.pack_02.model.User"</span><span>&nbsp;</span><span class="attribute">table</span><span>=</span><span class="attribute-value">"user"</span><span class="tag">&gt;</span><span>&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">id</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"id"</span><span>&nbsp;</span><span class="attribute">column</span><span>=</span><span class="attribute-value">"id"</span><span>&nbsp;</span><span class="attribute">type</span><span>=</span><span class="attribute-value">"java.lang.Integer"</span><span class="tag">&gt;</span><span>&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">generator</span><span>&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">"native"</span><span class="tag">/&gt;</span><span>&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">id</span><span class="tag">&gt;</span><span>&nbsp;</span></li>
    <li><br />
    </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">property</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"name"</span><span>&nbsp;</span><span class="attribute">column</span><span>=</span><span class="attribute-value">"name"</span><span>&nbsp;</span><span class="attribute">type</span><span>=</span><span class="attribute-value">"java.lang.String"</span><span class="tag">/&gt;</span><span>&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">many-to-one</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"room"</span><span>&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">column</span><span>=</span><span class="attribute-value">"room_id"</span><span>&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">"com.hb3.pack_02.model.Room"</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">cascade</span><span>=</span><span class="attribute-value">"all"</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">outer-join</span><span>=</span><span class="attribute-value">"true"</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">unique</span><span>=</span><span class="attribute-value">"true"</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">class</span><span class="tag">&gt;</span><span>&nbsp;</span></li>
    <li><br />
    </li>
    <li class="alt"><span class="tag">&lt;/</span><span class="tag-name">hibernate-mapping</span><span class="tag">&gt;</span></li>
</ol>
</div>
<p><font color="#000000">Room.hbm.xml</font></p>
<div class="highlighter">
<ol class="highlighter-xml">
    <li><span class="tag">&lt;?</span><span class="tag-name">xml</span><span>&nbsp;</span><span class="attribute">version</span><span>=</span><span class="attribute-value">"1.0"</span><span>&nbsp;</span><span class="attribute">encoding</span><span>=</span><span class="attribute-value">"UTF-8"</span><span class="tag">?&gt;</span></li>
    <li class="alt"><br />
    </li>
    <li><span class="tag">&lt;!DOCTYPE&nbsp;hibernate-mapping&nbsp;PUBLIC</span></li>
    <li class="alt"><span class="tag">&nbsp;&nbsp;&nbsp;&nbsp;"-//Hibernate/Hibernate&nbsp;Mapping&nbsp;DTD&nbsp;3.0//EN"&nbsp;</span></li>
    <li><span class="tag">&nbsp;&nbsp;&nbsp;&nbsp;"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"&gt;</span></li>
    <li class="alt"><br />
    </li>
    <li><span class="tag">&lt;</span><span class="tag-name">hibernate-mapping</span><span class="tag">&gt;</span><span>&nbsp;</span></li>
    <li class="alt"><br />
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">class</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"com.hb3.pack_02.model.Room"</span><span>&nbsp;</span><span class="attribute">table</span><span>=</span><span class="attribute-value">"room"</span><span class="tag">&gt;</span><span>&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">id</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"id"</span><span>&nbsp;</span><span class="attribute">column</span><span>=</span><span class="attribute-value">"id"</span><span class="tag">&gt;</span><span>&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">generator</span><span>&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">"native"</span><span class="tag">/&gt;</span><span>&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">id</span><span class="tag">&gt;</span><span>&nbsp;</span></li>
    <li><br />
    </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">property</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"address"</span><span>&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">column</span><span>=</span><span class="attribute-value">"address"</span><span>&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">type</span><span>=</span><span class="attribute-value">"java.lang.String"</span><span class="tag">/&gt;</span><span>&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">one-to-one</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"user"</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">"com.hb3.pack_02.model.User"</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">property-ref</span><span>=</span><span class="attribute-value">"room"</span><span class="tag">/&gt;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">class</span><span class="tag">&gt;</span><span>&nbsp;</span></li>
    <li class="alt"><br />
    </li>
    <li><span class="tag">&lt;/</span><span class="tag-name">hibernate-mapping</span><span class="tag">&gt;</span></li>
</ol>
</div>
<p>测试代码：</p>
<div class="highlighter">
<ol class="highlighter-j">
    <li><span class="keyword">package</span><span>&nbsp;com.hb3.pack_02;</span></li>
    <li class="alt"><br />
    </li>
    <li><span class="keyword">import</span><span>&nbsp;org.hibernate.Session;</span></li>
    <li class="alt"><span class="keyword">import</span><span>&nbsp;org.hibernate.SessionFactory;</span></li>
    <li><span class="keyword">import</span><span>&nbsp;org.hibernate.Transaction;</span></li>
    <li class="alt"><span class="keyword">import</span><span>&nbsp;org.hibernate.cfg.Configuration;</span></li>
    <li><br />
    </li>
    <li class="alt"><span class="keyword">import</span><span>&nbsp;com.hb3.pack_02.model.Room;</span></li>
    <li><span class="keyword">import</span><span>&nbsp;com.hb3.pack_02.model.User;</span></li>
    <li class="alt"><br />
    </li>
    <li><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;BusinessService&nbsp;{</span></li>
    <li class="alt"><br />
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;main(String[]&nbsp;args)&nbsp;{</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Configuration&nbsp;config&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;Configuration().configure();</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SessionFactory&nbsp;sessionFactory&nbsp;=&nbsp;config.buildSessionFactory();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Session&nbsp;session&nbsp;=&nbsp;sessionFactory.openSession();</span></li>
    <li class="alt"><br />
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;User&nbsp;user1&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;User();</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;user1.setName(</span><span class="string">"shenbin"</span><span>);&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Room&nbsp;room1&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;Room();&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;room1.setAddress(</span><span class="string">"NTU-M8-419"</span><span>);</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;user1.setRoom(room1);</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;User&nbsp;user2&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;User();&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;user2.setName(</span><span class="string">"chanyan"</span><span>);&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Room&nbsp;room2&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;Room();&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;room2.setAddress(</span><span class="string">"NTU-M8-418"</span><span>);</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;user2.setRoom(room2);</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Transaction&nbsp;tx&nbsp;=&nbsp;session.beginTransaction();</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session.save(user1);</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session.save(user2);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tx.commit();</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Room&nbsp;room&nbsp;=&nbsp;(Room)&nbsp;session.load(Room.</span><span class="keyword">class</span><span>,&nbsp;</span><span class="keyword">new</span><span>&nbsp;Integer(</span><span class="number">1</span><span>));</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(room.getUser().getName());</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session.close();</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sessionFactory.close();</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li class="alt"><span>}</span></li>
</ol>
</div>
<p><strong>&nbsp;A.主键关联</strong></p>
<p><img src="http://www.javaworld.com.tw/confluence/download/attachments/3524/OneToOnePK-1.jpg" align="absmiddle" border="0"  alt="" /></p>
<p>DDL：</p>
<div class="highlighter">
<ol class="highlighter-xml">
    <li><span>CREATE&nbsp;TABLE&nbsp;user&nbsp;(</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;id&nbsp;INT(11)&nbsp;NOT&nbsp;NULL&nbsp;auto_increment&nbsp;PRIMARY&nbsp;KEY,</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;name&nbsp;VARCHAR(100)&nbsp;NOT&nbsp;NULL&nbsp;default&nbsp;''</span></li>
    <li class="alt"><span>);</span></li>
    <li><br />
    </li>
    <li class="alt"><span>CREATE&nbsp;TABLE&nbsp;room&nbsp;(</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;id&nbsp;INT(11)&nbsp;NOT&nbsp;NULL&nbsp;auto_increment&nbsp;PRIMARY&nbsp;KEY,</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;address&nbsp;VARCHAR(100)&nbsp;NOT&nbsp;NULL&nbsp;default&nbsp;''</span></li>
    <li><span>);</span></li>
</ol>
</div>
<p><font style="background-color: #f8f8f8;" color="#000000">Room和User类同上。</font></p>
<p>Room.hbm.xml</p>
<div class="highlighter">
<ol class="highlighter-xml">
    <li><span class="tag">&lt;?</span><span class="tag-name">xml</span><span>&nbsp;</span><span class="attribute">version</span><span>=</span><span class="attribute-value">"1.0"</span><span>&nbsp;</span><span class="attribute">encoding</span><span>=</span><span class="attribute-value">"UTF-8"</span><span class="tag">?&gt;</span></li>
    <li class="alt"><br />
    </li>
    <li><span class="tag">&lt;!DOCTYPE&nbsp;hibernate-mapping&nbsp;PUBLIC</span></li>
    <li class="alt"><span class="tag">&nbsp;&nbsp;&nbsp;&nbsp;"-//Hibernate/Hibernate&nbsp;Mapping&nbsp;DTD&nbsp;3.0//EN"&nbsp;</span></li>
    <li><span class="tag">&nbsp;&nbsp;&nbsp;&nbsp;"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"&gt;</span></li>
    <li class="alt"><br />
    </li>
    <li><span class="tag">&lt;</span><span class="tag-name">hibernate-mapping</span><span class="tag">&gt;</span><span>&nbsp;</span></li>
    <li class="alt"><br />
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">class</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"com.hb3.pack_18.model.Room"</span><span>&nbsp;</span><span class="attribute">table</span><span>=</span><span class="attribute-value">"room"</span><span class="tag">&gt;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">id</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"id"</span><span>&nbsp;</span><span class="attribute">column</span><span>=</span><span class="attribute-value">"id"</span><span class="tag">&gt;</span><span>&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">generator</span><span>&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">"foreign"</span><span class="tag">&gt;</span><span>&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">param</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"property"</span><span class="tag">&gt;</span><span>user</span><span class="tag">&lt;/</span><span class="tag-name">param</span><span class="tag">&gt;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">generator</span><span class="tag">&gt;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">id</span><span class="tag">&gt;</span><span>&nbsp;</span></li>
    <li class="alt"><br />
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">property</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"address"</span><span>&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">column</span><span>=</span><span class="attribute-value">"address"</span><span>&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">type</span><span>=</span><span class="attribute-value">"java.lang.String"</span><span class="tag">/&gt;</span><span>&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">one-to-one</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"user"</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">"com.hb3.pack_18.model.User"</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">constrained</span><span>=</span><span class="attribute-value">"true"</span><span class="tag">/&gt;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">class</span><span class="tag">&gt;</span><span>&nbsp;</span></li>
    <li><br />
    </li>
    <li class="alt"><span class="tag">&lt;/</span><span class="tag-name">hibernate-mapping</span><span class="tag">&gt;</span></li>
</ol>
</div>
<p>User.hbm.xml</p>
<div class="highlighter">
<ol class="highlighter-xml">
    <li><span class="tag">&lt;?</span><span class="tag-name">xml</span><span>&nbsp;</span><span class="attribute">version</span><span>=</span><span class="attribute-value">"1.0"</span><span>&nbsp;</span><span class="attribute">encoding</span><span>=</span><span class="attribute-value">"UTF-8"</span><span class="tag">?&gt;</span></li>
    <li class="alt"><br />
    </li>
    <li><span class="tag">&lt;!DOCTYPE&nbsp;hibernate-mapping&nbsp;PUBLIC</span></li>
    <li class="alt"><span class="tag">&nbsp;&nbsp;&nbsp;&nbsp;"-//Hibernate/Hibernate&nbsp;Mapping&nbsp;DTD&nbsp;3.0//EN"&nbsp;</span></li>
    <li><span class="tag">&nbsp;&nbsp;&nbsp;&nbsp;"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"&gt;</span></li>
    <li class="alt"><br />
    </li>
    <li><span class="tag">&lt;</span><span class="tag-name">hibernate-mapping</span><span class="tag">&gt;</span><span>&nbsp;</span></li>
    <li class="alt"><br />
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">class</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"com.hb3.pack_18.model.User"</span><span>&nbsp;</span><span class="attribute">table</span><span>=</span><span class="attribute-value">"user"</span><span class="tag">&gt;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">id</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"id"</span><span>&nbsp;</span><span class="attribute">column</span><span>=</span><span class="attribute-value">"id"</span><span>&nbsp;</span><span class="attribute">type</span><span>=</span><span class="attribute-value">"java.lang.Integer"</span><span class="tag">&gt;</span><span>&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">generator</span><span>&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">"native"</span><span class="tag">/&gt;</span><span>&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">id</span><span class="tag">&gt;</span><span>&nbsp;</span></li>
    <li class="alt"><br />
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">property</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"name"</span><span>&nbsp;</span><span class="attribute">column</span><span>=</span><span class="attribute-value">"name"</span><span>&nbsp;</span><span class="attribute">type</span><span>=</span><span class="attribute-value">"java.lang.String"</span><span class="tag">/&gt;</span><span>&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">one-to-one</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"room"</span><span>&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">"com.hb3.pack_18.model.Room"</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">cascade</span><span>=</span><span class="attribute-value">"all"</span><span class="tag">/&gt;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">class</span><span class="tag">&gt;</span><span>&nbsp;</span></li>
    <li><br />
    </li>
    <li class="alt"><span class="tag">&lt;/</span><span class="tag-name">hibernate-mapping</span><span class="tag">&gt;</span></li>
</ol>
</div>
<p>测试代码：</p>
<div class="highlighter">
<ol class="highlighter-j">
    <li><span class="keyword">package</span><span>&nbsp;com.hb3.pack_18;</span></li>
    <li class="alt"><br />
    </li>
    <li><span class="keyword">import</span><span>&nbsp;java.io.IOException;</span></li>
    <li class="alt"><span class="keyword">import</span><span>&nbsp;java.sql.SQLException;</span></li>
    <li><br />
    </li>
    <li class="alt"><span class="keyword">import</span><span>&nbsp;org.hibernate.Session;</span></li>
    <li><span class="keyword">import</span><span>&nbsp;org.hibernate.SessionFactory;</span></li>
    <li class="alt"><span class="keyword">import</span><span>&nbsp;org.hibernate.Transaction;</span></li>
    <li><span class="keyword">import</span><span>&nbsp;org.hibernate.cfg.Configuration;</span></li>
    <li class="alt"><br />
    </li>
    <li><span class="keyword">import</span><span>&nbsp;com.hb3.pack_18.model.Room;</span></li>
    <li class="alt"><span class="keyword">import</span><span>&nbsp;com.hb3.pack_18.model.User;</span></li>
    <li><br />
    </li>
    <li class="alt"><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;BusinessService&nbsp;{</span></li>
    <li><br />
    </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;main(String[]&nbsp;args)&nbsp;</span><span class="keyword">throws</span><span>&nbsp;IOException,&nbsp;SQLException&nbsp;{</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Configuration&nbsp;config&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;Configuration().configure();</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SessionFactory&nbsp;sessionFactory&nbsp;=&nbsp;config.buildSessionFactory();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Session&nbsp;session&nbsp;=&nbsp;sessionFactory.openSession();</span></li>
    <li><br />
    </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;User&nbsp;user1&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;User();</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;user1.setName(</span><span class="string">"chanyan"</span><span>);&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Room&nbsp;room1&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;Room();&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;room1.setAddress(</span><span class="string">"NTU-M8-419"</span><span>);</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;user1.setRoom(room1);</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;room1.setUser(user1);</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;User&nbsp;user2&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;User();&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;user2.setName(</span><span class="string">"shenbin"</span><span>);&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Room&nbsp;room2&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;Room();&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;room2.setAddress(</span><span class="string">"NTU-M8-418"</span><span>);</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;user2.setRoom(room2);</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;room2.setUser(user2);</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Transaction&nbsp;tx&nbsp;=&nbsp;session.beginTransaction();</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session.save(user1);</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session.save(user2);</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tx.commit();</span></li>
    <li><br />
    </li>
    <li class="alt"><br />
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session.close();</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sessionFactory.close();</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li class="alt"><span>}</span></li>
</ol>
</div>
<img src ="http://www.blogjava.net/super2/aggbug/237459.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/super2/" target="_blank">淘声依旧</a> 2008-10-29 19:40 <a href="http://www.blogjava.net/super2/archive/2008/10/29/237459.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hibernate3学习笔记(十八)｜关系映射：一对多</title><link>http://www.blogjava.net/super2/archive/2008/10/29/237458.html</link><dc:creator>淘声依旧</dc:creator><author>淘声依旧</author><pubDate>Wed, 29 Oct 2008 11:39:00 GMT</pubDate><guid>http://www.blogjava.net/super2/archive/2008/10/29/237458.html</guid><wfw:comment>http://www.blogjava.net/super2/comments/237458.html</wfw:comment><comments>http://www.blogjava.net/super2/archive/2008/10/29/237458.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/super2/comments/commentRss/237458.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/super2/services/trackbacks/237458.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: User对Room是多对一的关系，那么反过来Room对User就是一对多的关系了。User.java：    package&nbsp;com.hb3.pack_17.model;            public&nbsp;class&nbsp;User&nbsp;{            &nbsp;&nbsp;&nbsp;&nbsp;private&...&nbsp;&nbsp;<a href='http://www.blogjava.net/super2/archive/2008/10/29/237458.html'>阅读全文</a><img src ="http://www.blogjava.net/super2/aggbug/237458.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/super2/" target="_blank">淘声依旧</a> 2008-10-29 19:39 <a href="http://www.blogjava.net/super2/archive/2008/10/29/237458.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hibernate3学习笔记(十七)｜关系映射：多对一 </title><link>http://www.blogjava.net/super2/archive/2008/10/29/237456.html</link><dc:creator>淘声依旧</dc:creator><author>淘声依旧</author><pubDate>Wed, 29 Oct 2008 11:38:00 GMT</pubDate><guid>http://www.blogjava.net/super2/archive/2008/10/29/237456.html</guid><wfw:comment>http://www.blogjava.net/super2/comments/237456.html</wfw:comment><comments>http://www.blogjava.net/super2/archive/2008/10/29/237456.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/super2/comments/commentRss/237456.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/super2/services/trackbacks/237456.html</trackback:ping><description><![CDATA[数据表设计如下图：
<p><img src="http://www.javaworld.com.tw/confluence/download/attachments/3187/manyToOne.jpg" align="absmiddle" border="0"  alt="" /></p>
<p>DDL文件：</p>
<div class="highlighter">
<ol class="highlighter-xml">
    <li><span>CREATE&nbsp;TABLE&nbsp;user&nbsp;(</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;id&nbsp;INT(11)&nbsp;NOT&nbsp;NULL&nbsp;auto_increment&nbsp;PRIMARY&nbsp;KEY,</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;name&nbsp;VARCHAR(100)&nbsp;NOT&nbsp;NULL&nbsp;default&nbsp;'',</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;room_id&nbsp;INT(11)</span></li>
    <li><span>);</span></li>
    <li class="alt"><br />
    </li>
    <li><span>CREATE&nbsp;TABLE&nbsp;room&nbsp;(</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;id&nbsp;INT(11)&nbsp;NOT&nbsp;NULL&nbsp;auto_increment&nbsp;PRIMARY&nbsp;KEY,</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;address&nbsp;VARCHAR(100)&nbsp;NOT&nbsp;NULL&nbsp;default&nbsp;''</span></li>
    <li class="alt"><span>);</span></li>
</ol>
</div>
<p>Room.java</p>
<div class="highlighter">
<ol class="highlighter-j">
    <li><span class="keyword">package</span><span>&nbsp;com.hb3.pack_16.model;</span></li>
    <li class="alt"><br />
    </li>
    <li><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;Room&nbsp;{</span></li>
    <li class="alt"><br />
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;Integer&nbsp;id;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;String&nbsp;address;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;Room()&nbsp;{</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;Integer&nbsp;getId()&nbsp;{&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;id;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;setId(Integer&nbsp;id)&nbsp;{&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.id&nbsp;=&nbsp;id;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;String&nbsp;getAddress()&nbsp;{&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;address;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;setAddress(String&nbsp;address)&nbsp;{&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.address&nbsp;=&nbsp;address;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li><span>}</span></li>
</ol>
</div>
<p><font style="background-color: #f8f8f8;" color="#000000">User.java</font></p>
<div class="highlighter">
<ol class="highlighter-c">
    <li><span>package&nbsp;com.hb3.pack_16.model;</span></li>
    <li class="alt"><br />
    </li>
    <li><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;User&nbsp;{</span></li>
    <li class="alt"><br />
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;Integer&nbsp;id;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;String&nbsp;name;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;Room&nbsp;room;</span></li>
    <li class="alt"><br />
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;User()&nbsp;{</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li><br />
    </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;Integer&nbsp;getId()&nbsp;{</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;id;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;setId(Integer&nbsp;id)&nbsp;{</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.id&nbsp;=&nbsp;id;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;String&nbsp;getName()&nbsp;{</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;name;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;setName(String&nbsp;name)&nbsp;{</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.name&nbsp;=&nbsp;name;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;Room&nbsp;getRoom()&nbsp;{</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;room;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;setRoom(Room&nbsp;room)&nbsp;{</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.room&nbsp;=&nbsp;room;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li class="alt"><span>}</span></li>
</ol>
</div>
<p>Room.hbm.xml：</p>
<div class="highlighter">
<ol class="highlighter-xml">
    <li><span class="tag">&lt;?</span><span class="tag-name">xml</span><span>&nbsp;</span><span class="attribute">version</span><span>=</span><span class="attribute-value">"1.0"</span><span>&nbsp;</span><span class="attribute">encoding</span><span>=</span><span class="attribute-value">"utf-8"</span><span class="tag">?&gt;</span></li>
    <li class="alt"><span class="tag">&lt;!DOCTYPE&nbsp;hibernate-mapping&nbsp;</span></li>
    <li><span class="tag">&nbsp;&nbsp;&nbsp;&nbsp;PUBLIC&nbsp;"-//Hibernate/Hibernate&nbsp;Mapping&nbsp;DTD&nbsp;3.0//EN"&nbsp;</span></li>
    <li class="alt"><span class="tag">&nbsp;&nbsp;&nbsp;&nbsp;"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"&gt;</span></li>
    <li><br />
    </li>
    <li class="alt"><span class="tag">&lt;</span><span class="tag-name">hibernate-mapping</span><span class="tag">&gt;</span><span>&nbsp;</span></li>
    <li><br />
    </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">class</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"com.hb3.pack_16.model.Room"</span><span>&nbsp;</span><span class="attribute">table</span><span>=</span><span class="attribute-value">"room"</span><span class="tag">&gt;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">id</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"id"</span><span>&nbsp;</span><span class="attribute">column</span><span>=</span><span class="attribute-value">"id"</span><span class="tag">&gt;</span><span>&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">generator</span><span>&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">"native"</span><span class="tag">/&gt;</span><span>&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">id</span><span class="tag">&gt;</span><span>&nbsp;</span></li>
    <li><br />
    </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">property</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"address"</span><span>&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">column</span><span>=</span><span class="attribute-value">"address"</span><span>&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">type</span><span>=</span><span class="attribute-value">"java.lang.String"</span><span class="tag">/&gt;</span><span>&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">class</span><span class="tag">&gt;</span><span>&nbsp;</span></li>
    <li class="alt"><br />
    </li>
    <li><span class="tag">&lt;/</span><span class="tag-name">hibernate-mapping</span><span class="tag">&gt;</span></li>
</ol>
</div>
<p><font style="background-color: #f8f8f8;" color="#000000">User.hbm.xml：</font></p>
<div class="highlighter">
<ol class="highlighter-xml">
    <li><span class="tag">&lt;?</span><span class="tag-name">xml</span><span>&nbsp;</span><span class="attribute">version</span><span>=</span><span class="attribute-value">"1.0"</span><span>&nbsp;</span><span class="attribute">encoding</span><span>=</span><span class="attribute-value">"utf-8"</span><span class="tag">?&gt;</span></li>
    <li class="alt"><span class="tag">&lt;!DOCTYPE&nbsp;hibernate-mapping&nbsp;</span></li>
    <li><span class="tag">&nbsp;&nbsp;&nbsp;&nbsp;PUBLIC&nbsp;"-//Hibernate/Hibernate&nbsp;Mapping&nbsp;DTD&nbsp;3.0//EN"&nbsp;</span></li>
    <li class="alt"><span class="tag">&nbsp;&nbsp;&nbsp;&nbsp;"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"&gt;</span></li>
    <li><br />
    </li>
    <li class="alt"><span class="tag">&lt;</span><span class="tag-name">hibernate-mapping</span><span class="tag">&gt;</span><span>&nbsp;</span></li>
    <li><br />
    </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">class</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"com.hb3.pack_16.model.User"</span><span>&nbsp;</span><span class="attribute">table</span><span>=</span><span class="attribute-value">"user"</span><span class="tag">&gt;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">id</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"id"</span><span>&nbsp;</span><span class="attribute">column</span><span>=</span><span class="attribute-value">"id"</span><span>&nbsp;</span><span class="attribute">type</span><span>=</span><span class="attribute-value">"java.lang.Integer"</span><span class="tag">&gt;</span><span>&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">generator</span><span>&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">"native"</span><span class="tag">/&gt;</span><span>&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">id</span><span class="tag">&gt;</span><span>&nbsp;</span></li>
    <li><br />
    </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">property</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"name"</span><span>&nbsp;</span><span class="attribute">column</span><span>=</span><span class="attribute-value">"name"</span><span>&nbsp;</span><span class="attribute">type</span><span>=</span><span class="attribute-value">"java.lang.String"</span><span class="tag">/&gt;</span><span>&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">many-to-one</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"room"</span><span>&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">column</span><span>=</span><span class="attribute-value">"room_id"</span><span>&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">"com.hb3.pack_16.model.Room"</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">cascade</span><span>=</span><span class="attribute-value">"all"</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">outer-join</span><span>=</span><span class="attribute-value">"true"</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">class</span><span class="tag">&gt;</span><span>&nbsp;</span></li>
    <li class="alt"><br />
    </li>
    <li><span class="tag">&lt;/</span><span class="tag-name">hibernate-mapping</span><span class="tag">&gt;</span></li>
</ol>
</div>
<p>测试代码：</p>
<div class="highlighter">
<ol class="highlighter-j">
    <li><span class="keyword">package</span><span>&nbsp;com.hb3.pack_16;</span></li>
    <li class="alt"><br />
    </li>
    <li><span class="keyword">import</span><span>&nbsp;java.io.IOException;</span></li>
    <li class="alt"><span class="keyword">import</span><span>&nbsp;java.sql.SQLException;</span></li>
    <li><br />
    </li>
    <li class="alt"><span class="keyword">import</span><span>&nbsp;org.hibernate.Session;</span></li>
    <li><span class="keyword">import</span><span>&nbsp;org.hibernate.SessionFactory;</span></li>
    <li class="alt"><span class="keyword">import</span><span>&nbsp;org.hibernate.Transaction;</span></li>
    <li><span class="keyword">import</span><span>&nbsp;org.hibernate.cfg.Configuration;</span></li>
    <li class="alt"><br />
    </li>
    <li><span class="keyword">import</span><span>&nbsp;com.hb3.pack_16.model.Room;</span></li>
    <li class="alt"><span class="keyword">import</span><span>&nbsp;com.hb3.pack_16.model.User;</span></li>
    <li><br />
    </li>
    <li class="alt"><br />
    </li>
    <li><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;BusinessService&nbsp;{</span></li>
    <li class="alt"><br />
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;main(String[]&nbsp;args)&nbsp;</span><span class="keyword">throws</span><span>&nbsp;IOException,&nbsp;SQLException&nbsp;{</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Configuration&nbsp;config&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;Configuration().configure();</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SessionFactory&nbsp;sessionFactory&nbsp;=&nbsp;config.buildSessionFactory();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Session&nbsp;session&nbsp;=&nbsp;sessionFactory.openSession();</span></li>
    <li class="alt"><br />
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Room&nbsp;room1&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;Room();&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;room1.setAddress(</span><span class="string">"NTU-M8-419"</span><span>);&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Room&nbsp;room2&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;Room();&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;room2.setAddress(</span><span class="string">"NTU-G3-302"</span><span>);&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;User&nbsp;user1&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;User();&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;user1.setName(</span><span class="string">"shenbin"</span><span>);&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;user1.setRoom(room1);&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;User&nbsp;user2&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;User();&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;user2.setName(</span><span class="string">"chenyan"</span><span>);&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;user2.setRoom(room1);&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;User&nbsp;user3&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;User();&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;user3.setName(</span><span class="string">"yangye"</span><span>);&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;user3.setRoom(room2);&nbsp;</span></li>
    <li><br />
    </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Transaction&nbsp;tx&nbsp;=&nbsp;session.beginTransaction();&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session.save(user1);</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session.save(user2);</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session.save(user3);&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tx.commit();</span></li>
    <li><br />
    </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;User&nbsp;user&nbsp;=&nbsp;(User)&nbsp;session.load(User.</span><span class="keyword">class</span><span>,&nbsp;</span><span class="keyword">new</span><span>&nbsp;Integer(</span><span class="number">1</span><span>));</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(user.getName());</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(user.getRoom().getAddress());</span></li>
    <li><br />
    </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session.close();</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sessionFactory.close();</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li class="alt"><span>}</span></li>
</ol>
</div>
<p>在&lt;many-to-one&gt;的设定中：</p>
<p><strong>cascade</strong>表示操作时的级联关系。表示主控方在进行增删改操作时，被控方是否进行相关操作。</p>
<p><strong>outer-join</strong>表示查询时是否使用外连接查询方式。</p>
<p><font color="#993300">outer-join为true的时候，生成的查询SQL为：</font></p>
<p>Hibernate: <br />
select user0_.id as id1_, user0_.name as name0_1_, user0_.room_id as room3_0_1_, <br />
room1_.id as id0_, room1_.address as address1_0_ from user user0_ <br />
left <span class="code-keyword">outer</span> join room room1_ on user0_.room_id=room1_.id where user0_.id=?</p>
<font color="#993300">outer-join为false的时候，生成的查询SQL为：Hibernate:</font> <br />
select user0_.id as id0_, user0_.name as name0_0_, user0_.room_id as room3_0_0_ <br />
from user user0_ where user0_.id=?<br />
Hibernate: <br />
select room0_.id as id0_, room0_.address as address1_0_ <br />
from room room0_ where room0_.id=?
<p>&nbsp;</p>
<p>不过最好使用<strong>fetch</strong>属性来表示，及fetch="join"或者fetch="select"。</p>
<img src ="http://www.blogjava.net/super2/aggbug/237456.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/super2/" target="_blank">淘声依旧</a> 2008-10-29 19:38 <a href="http://www.blogjava.net/super2/archive/2008/10/29/237456.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hibernate3学习笔记(十五)｜继承映射</title><link>http://www.blogjava.net/super2/archive/2008/10/29/237454.html</link><dc:creator>淘声依旧</dc:creator><author>淘声依旧</author><pubDate>Wed, 29 Oct 2008 11:37:00 GMT</pubDate><guid>http://www.blogjava.net/super2/archive/2008/10/29/237454.html</guid><wfw:comment>http://www.blogjava.net/super2/comments/237454.html</wfw:comment><comments>http://www.blogjava.net/super2/archive/2008/10/29/237454.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/super2/comments/commentRss/237454.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/super2/services/trackbacks/237454.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 这里详细讨论继承映射的3种方式：1.Table per concrete class继承关系如下图：数据表设计如下图：MySQL数据库中执行如下DDL：    CREATE&nbsp;TABLE&nbsp;defaultuser&nbsp;(    &nbsp;&nbsp;&nbsp;&nbsp;id&nbsp;INT(11)&nbsp;NOT&nbsp;N...&nbsp;&nbsp;<a href='http://www.blogjava.net/super2/archive/2008/10/29/237454.html'>阅读全文</a><img src ="http://www.blogjava.net/super2/aggbug/237454.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/super2/" target="_blank">淘声依旧</a> 2008-10-29 19:37 <a href="http://www.blogjava.net/super2/archive/2008/10/29/237454.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hibernate3学习笔记(十六)｜容器映射</title><link>http://www.blogjava.net/super2/archive/2008/10/29/237455.html</link><dc:creator>淘声依旧</dc:creator><author>淘声依旧</author><pubDate>Wed, 29 Oct 2008 11:37:00 GMT</pubDate><guid>http://www.blogjava.net/super2/archive/2008/10/29/237455.html</guid><wfw:comment>http://www.blogjava.net/super2/comments/237455.html</wfw:comment><comments>http://www.blogjava.net/super2/archive/2008/10/29/237455.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/super2/comments/commentRss/237455.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/super2/services/trackbacks/237455.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 1.Set映射DDL:    CREATE&nbsp;TABLE&nbsp;user&nbsp;(    &nbsp;&nbsp;&nbsp;&nbsp;id&nbsp;INT(11)&nbsp;NOT&nbsp;NULL&nbsp;auto_increment&nbsp;PRIMARY&nbsp;KEY,    &nbsp;&nbsp;&nbsp;&nbsp;na...&nbsp;&nbsp;<a href='http://www.blogjava.net/super2/archive/2008/10/29/237455.html'>阅读全文</a><img src ="http://www.blogjava.net/super2/aggbug/237455.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/super2/" target="_blank">淘声依旧</a> 2008-10-29 19:37 <a href="http://www.blogjava.net/super2/archive/2008/10/29/237455.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hibernate3学习笔记(十四)｜Blob、Clob</title><link>http://www.blogjava.net/super2/archive/2008/10/29/237453.html</link><dc:creator>淘声依旧</dc:creator><author>淘声依旧</author><pubDate>Wed, 29 Oct 2008 11:36:00 GMT</pubDate><guid>http://www.blogjava.net/super2/archive/2008/10/29/237453.html</guid><wfw:comment>http://www.blogjava.net/super2/comments/237453.html</wfw:comment><comments>http://www.blogjava.net/super2/archive/2008/10/29/237453.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/super2/comments/commentRss/237453.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/super2/services/trackbacks/237453.html</trackback:ping><description><![CDATA[<p>在Hibernate中，可以直接对Blob、Clob作映射。</p>
<p>DDL如下：</p>
<div class="highlighter">
<ol class="highlighter-xml">
    <li><span>CREATE&nbsp;TABLE&nbsp;user&nbsp;(</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;id&nbsp;INT(11)&nbsp;NOT&nbsp;NULL&nbsp;auto_increment&nbsp;PRIMARY&nbsp;KEY,</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;name&nbsp;VARCHAR(100)&nbsp;NOT&nbsp;NULL&nbsp;default&nbsp;'',</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;age&nbsp;INT,</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;photo&nbsp;BLOB,</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;resume&nbsp;TEXT</span></li>
    <li><span>);</span></li>
</ol>
</div>
<p>注意：由于<font color="#000000">BLOB字段大小不可预计，有时需要增大BLOB字段的大小，可在数据库中改用MEDIUMBLOB甚至LONGBLOB。</font></p>
<p>User.java</p>
<div class="highlighter">
<ol class="highlighter-j">
    <li><span class="keyword">package</span><span>&nbsp;com.hb3.pack_07.model;</span></li>
    <li class="alt"><br />
    </li>
    <li><span class="keyword">import</span><span>&nbsp;java.sql.Blob;</span></li>
    <li class="alt"><span class="keyword">import</span><span>&nbsp;java.sql.Clob;</span></li>
    <li><br />
    </li>
    <li class="alt"><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;User&nbsp;{</span></li>
    <li><br />
    </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;Integer&nbsp;id;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;String&nbsp;name;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;Integer&nbsp;age;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;Blob&nbsp;photo;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;Clob&nbsp;resume;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;User()&nbsp;{</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li class="alt"><br />
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;Integer&nbsp;getId()&nbsp;{</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;id;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;setId(Integer&nbsp;id)&nbsp;{</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.id&nbsp;=&nbsp;id;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;String&nbsp;getName()&nbsp;{</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;name;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;setName(String&nbsp;name)&nbsp;{</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.name&nbsp;=&nbsp;name;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;Integer&nbsp;getAge()&nbsp;{</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;age;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;setAge(Integer&nbsp;age)&nbsp;{</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.age&nbsp;=&nbsp;age;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;Blob&nbsp;getPhoto()&nbsp;{</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;photo;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;setPhoto(Blob&nbsp;photo)&nbsp;{</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.photo&nbsp;=&nbsp;photo;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;Clob&nbsp;getResume()&nbsp;{</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;resume;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;setResume(Clob&nbsp;resume)&nbsp;{</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.resume&nbsp;=&nbsp;resume;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li><span>}</span></li>
</ol>
</div>
<p><font style="background-color: #f8f8f8;" color="#000000">User.hbm.xml文件：</font></p>
<div class="highlighter">
<ol class="highlighter-xml">
    <li><span class="tag">&lt;?</span><span class="tag-name">xml</span><span>&nbsp;</span><span class="attribute">version</span><span>=</span><span class="attribute-value">"1.0"</span><span>&nbsp;</span><span class="attribute">encoding</span><span>=</span><span class="attribute-value">"UTF-8"</span><span class="tag">?&gt;</span></li>
    <li class="alt"><br />
    </li>
    <li><span class="tag">&lt;!DOCTYPE&nbsp;hibernate-mapping&nbsp;PUBLIC</span></li>
    <li class="alt"><span class="tag">&nbsp;&nbsp;&nbsp;&nbsp;"-//Hibernate/Hibernate&nbsp;Mapping&nbsp;DTD&nbsp;3.0//EN"&nbsp;</span></li>
    <li><span class="tag">&nbsp;&nbsp;&nbsp;&nbsp;"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"&gt;</span></li>
    <li class="alt"><br />
    </li>
    <li><span class="tag">&lt;</span><span class="tag-name">hibernate-mapping</span><span class="tag">&gt;</span></li>
    <li class="alt"><br />
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">class</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"com.hb3.pack_07.model.User"</span><span>&nbsp;</span><span class="attribute">table</span><span>=</span><span class="attribute-value">"user"</span><span class="tag">&gt;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">id</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"id"</span><span>&nbsp;</span><span class="attribute">column</span><span>=</span><span class="attribute-value">"id"</span><span>&nbsp;</span><span class="attribute">type</span><span>=</span><span class="attribute-value">"java.lang.Integer"</span><span class="tag">&gt;</span><span>&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">generator</span><span>&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">"native"</span><span class="tag">/&gt;</span><span>&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">id</span><span class="tag">&gt;</span><span>&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">property</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"name"</span><span>&nbsp;</span><span class="attribute">column</span><span>=</span><span class="attribute-value">"name"</span><span>&nbsp;</span><span class="attribute">type</span><span>=</span><span class="attribute-value">"java.lang.String"</span><span class="tag">/&gt;</span><span>&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">property</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"age"</span><span>&nbsp;</span><span class="attribute">column</span><span>=</span><span class="attribute-value">"age"</span><span>&nbsp;</span><span class="attribute">type</span><span>=</span><span class="attribute-value">"java.lang.Integer"</span><span class="tag">/&gt;</span><span>&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">property</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"photo"</span><span>&nbsp;</span><span class="attribute">column</span><span>=</span><span class="attribute-value">"photo"</span><span>&nbsp;</span><span class="attribute">type</span><span>=</span><span class="attribute-value">"java.sql.Blob"</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">property</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"resume"</span><span>&nbsp;</span><span class="attribute">column</span><span>=</span><span class="attribute-value">"resume"</span><span>&nbsp;</span><span class="attribute">type</span><span>=</span><span class="attribute-value">"java.sql.Clob"</span><span class="tag">/&gt;</span><span>&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">class</span><span class="tag">&gt;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span class="tag">&lt;/</span><span class="tag-name">hibernate-mapping</span><span class="tag">&gt;</span></li>
</ol>
</div>
<p>修改hibernate.cfg.xml文件如下：</p>
<p>......</p>
<p>&lt;mapping resource="com/hb3/pack_07/model/User.hbm.xml" /&gt;</p>
<p>......</p>
<p>&nbsp;</p>
<p>测试代码如下：</p>
<div class="highlighter">
<ol class="highlighter-j">
    <li><span class="keyword">package</span><span>&nbsp;com.hb3.pack_07;</span></li>
    <li class="alt"><br />
    </li>
    <li><span class="keyword">import</span><span>&nbsp;java.io.FileInputStream;</span></li>
    <li class="alt"><span class="keyword">import</span><span>&nbsp;java.io.FileOutputStream;</span></li>
    <li><span class="keyword">import</span><span>&nbsp;java.io.IOException;</span></li>
    <li class="alt"><span class="keyword">import</span><span>&nbsp;java.io.InputStream;</span></li>
    <li><span class="keyword">import</span><span>&nbsp;java.sql.Blob;</span></li>
    <li class="alt"><span class="keyword">import</span><span>&nbsp;java.sql.Clob;</span></li>
    <li><span class="keyword">import</span><span>&nbsp;java.sql.SQLException;</span></li>
    <li class="alt"><br />
    </li>
    <li><span class="keyword">import</span><span>&nbsp;org.hibernate.Hibernate;</span></li>
    <li class="alt"><span class="keyword">import</span><span>&nbsp;org.hibernate.Session;</span></li>
    <li><span class="keyword">import</span><span>&nbsp;org.hibernate.SessionFactory;</span></li>
    <li class="alt"><span class="keyword">import</span><span>&nbsp;org.hibernate.Transaction;</span></li>
    <li><span class="keyword">import</span><span>&nbsp;org.hibernate.cfg.Configuration;</span></li>
    <li class="alt"><br />
    </li>
    <li><span class="keyword">import</span><span>&nbsp;com.hb3.pack_07.model.User;</span></li>
    <li class="alt"><br />
    </li>
    <li><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;BusinessService&nbsp;{</span></li>
    <li class="alt"><br />
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;main(String[]&nbsp;args)&nbsp;</span><span class="keyword">throws</span><span>&nbsp;IOException,&nbsp;SQLException&nbsp;{</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Configuration&nbsp;config&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;Configuration().configure();</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SessionFactory&nbsp;sessionFactory&nbsp;=&nbsp;config.buildSessionFactory();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Session&nbsp;session&nbsp;=&nbsp;sessionFactory.openSession();</span></li>
    <li class="alt"><br />
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FileInputStream&nbsp;fileInputStream&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;FileInputStream(</span><span class="string">"c:\\sunset.jpg"</span><span>);</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Blob&nbsp;photo&nbsp;=&nbsp;Hibernate.createBlob(fileInputStream);</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Clob&nbsp;resume&nbsp;=&nbsp;Hibernate.createClob(</span><span class="string">"Bla....Bla....resume&nbsp;text!!"</span><span>);</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;User&nbsp;user&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;User();</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;user.setName(</span><span class="string">"shenbin"</span><span>);</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;user.setAge(</span><span class="keyword">new</span><span>&nbsp;Integer(</span><span class="number">28</span><span>));</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;user.setPhoto(photo);</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;user.setResume(resume);</span></li>
    <li class="alt"><br />
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Transaction&nbsp;tx&nbsp;=&nbsp;session.beginTransaction();</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session.save(user);&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tx.commit();</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session.close();</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session&nbsp;=&nbsp;sessionFactory.openSession();</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;user&nbsp;=&nbsp;(User)&nbsp;session.load(User.</span><span class="keyword">class</span><span>,&nbsp;</span><span class="keyword">new</span><span>&nbsp;Integer(</span><span class="number">1</span><span>));</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.print(user.getAge()&nbsp;+&nbsp;</span><span class="string">"\t"</span><span>&nbsp;+</span></li>
    <li class="alt"><span>&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;user.getName()&nbsp;+&nbsp;</span><span class="string">"\t"</span><span>);</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;str_resume&nbsp;=&nbsp;user.getResume().getSubString(</span><span class="number">1</span><span>,&nbsp;(</span><span class="keyword">int</span><span>)&nbsp;user.getResume().length());</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(str_resume);</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InputStream&nbsp;inputStream&nbsp;=&nbsp;user.getPhoto().getBinaryStream();</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FileOutputStream&nbsp;fileOutputStream&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;FileOutputStream(</span><span class="string">"c:\\sunset_save.jpg"</span><span>);</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">byte</span><span>[]&nbsp;buf&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;</span><span class="keyword">byte</span><span>[</span><span class="number">1</span><span>];</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">int</span><span>&nbsp;len&nbsp;=&nbsp;</span><span class="number">0</span><span>;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">while</span><span>((len&nbsp;=&nbsp;inputStream.read(buf))&nbsp;!=&nbsp;-</span><span class="number">1</span><span>)&nbsp;{</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fileOutputStream.write(buf,&nbsp;</span><span class="number">0</span><span>,&nbsp;len);</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;inputStream.close();</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fileOutputStream.close();&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span class="string">"save&nbsp;photo&nbsp;to&nbsp;c:\\sunset_save.jpg"</span><span>);</span></li>
    <li><br />
    </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session.close();</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sessionFactory.close();</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li><span>}</span></li>
</ol>
</div>
<p>在MySQL中对BLOB以及CLOB类型的使用还是比较简单的，如果在Oracle DB中则相对复杂一些，计划在以后章节加以说明。</p>
<img src ="http://www.blogjava.net/super2/aggbug/237453.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/super2/" target="_blank">淘声依旧</a> 2008-10-29 19:36 <a href="http://www.blogjava.net/super2/archive/2008/10/29/237453.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hibernate3学习笔记(十三)｜Dynamic Model</title><link>http://www.blogjava.net/super2/archive/2008/10/29/237452.html</link><dc:creator>淘声依旧</dc:creator><author>淘声依旧</author><pubDate>Wed, 29 Oct 2008 11:35:00 GMT</pubDate><guid>http://www.blogjava.net/super2/archive/2008/10/29/237452.html</guid><wfw:comment>http://www.blogjava.net/super2/comments/237452.html</wfw:comment><comments>http://www.blogjava.net/super2/archive/2008/10/29/237452.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/super2/comments/commentRss/237452.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/super2/services/trackbacks/237452.html</trackback:ping><description><![CDATA[在构造系统原型阶段，由于需求尚未确定，程序中的POJO会在开发过程中存在相当大的变动，于是在Hibernate3中引入了动态模型的概念。如此不需要事先实际定义POJO。
<p>数据库DDL如下：</p>
<div class="highlighter">
<ol class="highlighter-c">
    <li><span>CREATE&nbsp;TABLE&nbsp;user&nbsp;(</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;id&nbsp;INT(11)&nbsp;NOT&nbsp;NULL&nbsp;auto_increment&nbsp;PRIMARY&nbsp;KEY,</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;name&nbsp;VARCHAR(100)&nbsp;NOT&nbsp;NULL&nbsp;</span><span class="keyword">default</span><span>&nbsp;</span><span class="string">''</span><span>,</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;age&nbsp;INT</span></li>
    <li><span>);</span></li>
</ol>
</div>
<p><font style="background-color: #f8f8f8;" color="#000000">User.hbm.xml配置文件中设定entity-name属性(属性值为查找的唯一标示符，不可重复)。</font></p>
<font style="background-color: #f8f8f8;" color="#000000">
<div class="highlighter">
<ol class="highlighter-xml">
    <li><span class="tag">&lt;?</span><span class="tag-name">xml</span><span>&nbsp;</span><span class="attribute">version</span><span>=</span><span class="attribute-value">"1.0"</span><span>&nbsp;</span><span class="attribute">encoding</span><span>=</span><span class="attribute-value">"UTF-8"</span><span class="tag">?&gt;</span></li>
    <li class="alt"><br />
    </li>
    <li><span class="tag">&lt;!DOCTYPE&nbsp;hibernate-mapping&nbsp;PUBLIC</span></li>
    <li class="alt"><span class="tag">&nbsp;&nbsp;&nbsp;&nbsp;"-//Hibernate/Hibernate&nbsp;Mapping&nbsp;DTD&nbsp;3.0//EN"&nbsp;</span></li>
    <li><span class="tag">&nbsp;&nbsp;&nbsp;&nbsp;"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"&gt;</span></li>
    <li class="alt"><br />
    </li>
    <li><span class="tag">&lt;</span><span class="tag-name">hibernate-mapping</span><span class="tag">&gt;</span></li>
    <li class="alt"><br />
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">class</span><span>&nbsp;</span><span class="attribute">entity-name</span><span>=</span><span class="attribute-value">"com.hb3.pack_06.model.DynamicUserModel"</span><span>&nbsp;</span><span class="attribute">table</span><span>=</span><span class="attribute-value">"user"</span><span class="tag">&gt;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">id</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"id"</span><span>&nbsp;</span><span class="attribute">column</span><span>=</span><span class="attribute-value">"id"</span><span>&nbsp;</span><span class="attribute">type</span><span>=</span><span class="attribute-value">"java.lang.Integer"</span><span class="tag">&gt;</span><span>&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">generator</span><span>&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">"native"</span><span class="tag">/&gt;</span><span>&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">id</span><span class="tag">&gt;</span></li>
    <li class="alt"><br />
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">property</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"name"</span><span>&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">column</span><span>=</span><span class="attribute-value">"name"</span><span>&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">type</span><span>=</span><span class="attribute-value">"java.lang.String"</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">property</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"age"</span><span>&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">column</span><span>=</span><span class="attribute-value">"age"</span><span>&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">type</span><span>=</span><span class="attribute-value">"java.lang.Integer"</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">class</span><span class="tag">&gt;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="tag">&lt;/</span><span class="tag-name">hibernate-mapping</span><span class="tag">&gt;</span></li>
</ol>
</div>
</font>
<p>修改hibernate.cfg.xml配置文件：</p>
<p>......</p>
<p>&lt;mapping resource="com/hb3/pack_06/model/User.hbm.xml" /&gt;</p>
<p>......</p>
<p>&nbsp;</p>
<p>测试代码如下：</p>
<div class="highlighter">
<ol class="highlighter-j">
    <li><span class="keyword">package</span><span>&nbsp;com.hb3.pack_06;</span></li>
    <li class="alt"><br />
    </li>
    <li><span class="keyword">import</span><span>&nbsp;java.util.HashMap;</span></li>
    <li class="alt"><span class="keyword">import</span><span>&nbsp;java.util.Map;</span></li>
    <li><br />
    </li>
    <li class="alt"><span class="keyword">import</span><span>&nbsp;org.hibernate.Session;</span></li>
    <li><span class="keyword">import</span><span>&nbsp;org.hibernate.SessionFactory;</span></li>
    <li class="alt"><span class="keyword">import</span><span>&nbsp;org.hibernate.Transaction;</span></li>
    <li><span class="keyword">import</span><span>&nbsp;org.hibernate.cfg.Configuration;</span></li>
    <li class="alt"><br />
    </li>
    <li><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;BusinessService&nbsp;{</span></li>
    <li class="alt"><br />
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;main(String[]&nbsp;args)&nbsp;{</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Configuration&nbsp;config&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;Configuration().configure();</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SessionFactory&nbsp;sessionFactory&nbsp;=&nbsp;config.buildSessionFactory();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Session&nbsp;session&nbsp;=&nbsp;sessionFactory.openSession();</span></li>
    <li class="alt"><br />
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Map&lt;String,&nbsp;Object&gt;&nbsp;userMap&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;HashMap&lt;String,&nbsp;Object&gt;();</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;userMap.put(</span><span class="string">"name"</span><span>,&nbsp;</span><span class="string">"shenbin"</span><span>);</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;userMap.put(</span><span class="string">"age"</span><span>,&nbsp;</span><span class="keyword">new</span><span>&nbsp;Integer(</span><span class="number">28</span><span>));</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Transaction&nbsp;tx&nbsp;=&nbsp;session.beginTransaction();</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session.save(</span><span class="string">"com.hb3.pack_06.model.DynamicUserModel"</span><span>,&nbsp;userMap);</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tx.commit();&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session.close();</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session&nbsp;=&nbsp;sessionFactory.openSession();</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;userMap&nbsp;=&nbsp;(Map)&nbsp;session.load(</span><span class="string">"com.hb3.pack_06.model.DynamicUserModel"</span><span>,&nbsp;</span><span class="keyword">new</span><span>&nbsp;Integer(</span><span class="number">1</span><span>));</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(userMap.get(</span><span class="string">"name"</span><span>));</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(userMap.get(</span><span class="string">"age"</span><span>));</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session.close();</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sessionFactory.close();</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li><span>}</span></li>
</ol>
</div>
<img src ="http://www.blogjava.net/super2/aggbug/237452.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/super2/" target="_blank">淘声依旧</a> 2008-10-29 19:35 <a href="http://www.blogjava.net/super2/archive/2008/10/29/237452.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hibernate3学习笔记(十一)｜复合主键</title><link>http://www.blogjava.net/super2/archive/2008/10/29/237450.html</link><dc:creator>淘声依旧</dc:creator><author>淘声依旧</author><pubDate>Wed, 29 Oct 2008 11:34:00 GMT</pubDate><guid>http://www.blogjava.net/super2/archive/2008/10/29/237450.html</guid><wfw:comment>http://www.blogjava.net/super2/comments/237450.html</wfw:comment><comments>http://www.blogjava.net/super2/archive/2008/10/29/237450.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/super2/comments/commentRss/237450.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/super2/services/trackbacks/237450.html</trackback:ping><description><![CDATA[<p>新建数据库User：</p>
<div class="highlighter">
<ol class="highlighter-xml">
    <li><span>CREATE&nbsp;TABLE&nbsp;user&nbsp;(</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;name&nbsp;VARCHAR(100)&nbsp;NOT&nbsp;NULL,</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;phone&nbsp;VARCHAR(50)&nbsp;NOT&nbsp;NULL,</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;age&nbsp;INT,</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;PRIMARY&nbsp;KEY(name,&nbsp;phone)</span></li>
    <li class="alt"><span>);</span></li>
</ol>
</div>
<p class="alt"><span><font color="#000000">现将name和phone定义成复合主键。分别使用2种方法如下：</font></span></p>
<p class="alt"><span><strong><font color="#993300"><font color="#ff0000">方法1.复合主键字段直接包含在PO类中。</font></font></strong></span></p>
<p class="alt"><span>User.java（<strong>需要实现Serializable接口，并定义equals()和hashCode()方法</strong>）</span></p>
<span>
<div class="highlighter">
<ol class="highlighter-c">
    <li><span>package&nbsp;com.hb3.pack_03.model;</span></li>
    <li class="alt"><br />
    </li>
    <li><span>import&nbsp;java.io.Serializable;</span></li>
    <li class="alt"><span>import&nbsp;org.apache.commons.lang.builder.EqualsBuilder;</span></li>
    <li><span>import&nbsp;org.apache.commons.lang.builder.HashCodeBuilder;</span></li>
    <li class="alt"><br />
    </li>
    <li><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;User&nbsp;implements&nbsp;Serializable&nbsp;{</span></li>
    <li class="alt"><br />
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;final&nbsp;</span><span class="keyword">long</span><span>&nbsp;serialVersionUID&nbsp;=&nbsp;-8377583111386512407L;</span></li>
    <li class="alt"><br />
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;String&nbsp;name;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;String&nbsp;phone;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;Integer&nbsp;age;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;User()&nbsp;{</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li><br />
    </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;Integer&nbsp;getAge()&nbsp;{</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;age;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li><br />
    </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;setAge(Integer&nbsp;age)&nbsp;{</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.age&nbsp;=&nbsp;age;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li><br />
    </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;String&nbsp;getName()&nbsp;{</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;name;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li><br />
    </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;setName(String&nbsp;name)&nbsp;{</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.name&nbsp;=&nbsp;name;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li><br />
    </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;String&nbsp;getPhone()&nbsp;{</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;phone;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li><br />
    </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;setPhone(String&nbsp;phone)&nbsp;{</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.phone&nbsp;=&nbsp;phone;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;boolean&nbsp;equals(Object&nbsp;obj)&nbsp;{</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(obj&nbsp;==&nbsp;</span><span class="keyword">this</span><span>)&nbsp;{</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;</span><span class="keyword">true</span><span>;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(!(obj&nbsp;instanceof&nbsp;User))&nbsp;{</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;</span><span class="keyword">false</span><span>;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;User&nbsp;user&nbsp;=&nbsp;(User)&nbsp;obj;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;</span><span class="keyword">new</span><span>&nbsp;EqualsBuilder()</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.append(</span><span class="keyword">this</span><span>.name,&nbsp;user.getName())</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.append(</span><span class="keyword">this</span><span>.phone,&nbsp;user.getPhone())</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.isEquals();</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">int</span><span>&nbsp;hashCode()&nbsp;{</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;</span><span class="keyword">new</span><span>&nbsp;HashCodeBuilder()</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.append(</span><span class="keyword">this</span><span>.name)</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.append(</span><span class="keyword">this</span><span>.phone)</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.toHashCode();</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li class="alt"><span>}</span></li>
</ol>
</div>
</span>
<p class="alt"><span>在定义<font color="#000000">equals和hashCode方法时</font>使用了apache的common-lang包。</span></p>
<p class="alt"><span>User.hbm.xml文件：</span></p>
<span>
<div class="highlighter">
<ol class="highlighter-xml">
    <li><span class="tag">&lt;?</span><span class="tag-name">xml</span><span>&nbsp;</span><span class="attribute">version</span><span>=</span><span class="attribute-value">"1.0"</span><span>&nbsp;</span><span class="attribute">encoding</span><span>=</span><span class="attribute-value">"UTF-8"</span><span class="tag">?&gt;</span></li>
    <li class="alt"><br />
    </li>
    <li><span class="tag">&lt;!DOCTYPE&nbsp;hibernate-mapping&nbsp;PUBLIC</span></li>
    <li class="alt"><span class="tag">&nbsp;&nbsp;&nbsp;&nbsp;"-//Hibernate/Hibernate&nbsp;Mapping&nbsp;DTD&nbsp;3.0//EN"&nbsp;</span></li>
    <li><span class="tag">&nbsp;&nbsp;&nbsp;&nbsp;"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"&gt;</span></li>
    <li class="alt"><br />
    </li>
    <li><span class="tag">&lt;</span><span class="tag-name">hibernate-mapping</span><span class="tag">&gt;</span><span>&nbsp;</span></li>
    <li class="alt"><br />
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">class</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"com.hb3.pack_03.model.User"</span><span>&nbsp;</span><span class="attribute">table</span><span>=</span><span class="attribute-value">"user"</span><span class="tag">&gt;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">composite-id</span><span class="tag">&gt;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">key-property</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"name"</span><span>&nbsp;</span></li>
    <li class="alt"><span>&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;</span><span class="attribute">column</span><span>=</span><span class="attribute-value">"name"</span><span>&nbsp;</span></li>
    <li><span>&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;</span><span class="attribute">type</span><span>=</span><span class="attribute-value">"java.lang.String"</span><span class="tag">/&gt;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">key-property</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"phone"</span><span>&nbsp;</span></li>
    <li><span>&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;</span><span class="attribute">column</span><span>=</span><span class="attribute-value">"phone"</span><span>&nbsp;</span></li>
    <li class="alt"><span>&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;</span><span class="attribute">type</span><span>=</span><span class="attribute-value">"java.lang.String"</span><span class="tag">/&gt;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">composite-id</span><span class="tag">&gt;</span></li>
    <li class="alt"><br />
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">property</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"age"</span><span>&nbsp;</span><span class="attribute">column</span><span>=</span><span class="attribute-value">"age"</span><span>&nbsp;</span><span class="attribute">type</span><span>=</span><span class="attribute-value">"java.lang.Integer"</span><span class="tag">/&gt;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">class</span><span class="tag">&gt;</span><span>&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span class="tag">&lt;/</span><span class="tag-name">hibernate-mapping</span><span class="tag">&gt;</span></li>
</ol>
</div>
</span>
<p class="alt"><span>hibernate.cfg.xml中修改：</span></p>
<p class="alt"><span>......</span></p>
<p class="alt"><span>&lt;mapping resource="com/hb3/pack_03/model/User.hbm.xml" /&gt;</span></p>
<p class="alt"><span>......</span></p>
<p class="alt">&nbsp;</p>
<p class="alt"><span>测试代码如下：</span></p>
<span>
<div class="highlighter">
<ol class="highlighter-j">
    <li><span class="keyword">package</span><span>&nbsp;com.hb3.pack_03;</span></li>
    <li class="alt"><br />
    </li>
    <li><span class="keyword">import</span><span>&nbsp;org.hibernate.Session;</span></li>
    <li class="alt"><span class="keyword">import</span><span>&nbsp;org.hibernate.SessionFactory;</span></li>
    <li><span class="keyword">import</span><span>&nbsp;org.hibernate.Transaction;</span></li>
    <li class="alt"><span class="keyword">import</span><span>&nbsp;org.hibernate.cfg.Configuration;</span></li>
    <li><br />
    </li>
    <li class="alt"><span class="keyword">import</span><span>&nbsp;com.hb3.pack_03.model.User;</span></li>
    <li><br />
    </li>
    <li class="alt"><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;BusinessService&nbsp;{</span></li>
    <li><br />
    </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;main(String[]&nbsp;args)&nbsp;{</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Configuration&nbsp;config&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;Configuration().configure();</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SessionFactory&nbsp;sessionFactory&nbsp;=&nbsp;config.buildSessionFactory();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Session&nbsp;session&nbsp;=&nbsp;sessionFactory.openSession();</span></li>
    <li><br />
    </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;User&nbsp;user&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;User();</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;user.setName(</span><span class="string">"shenbin"</span><span>);</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;user.setPhone(</span><span class="string">"0970123456"</span><span>);</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong>user.setAge(</strong></span><strong><span class="number">28</span><span>);</span></strong></li>
    <li class="alt"><span><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Transaction&nbsp;tx&nbsp;=&nbsp;session.beginTransaction();</strong></span></li>
    <li><span><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session.save(user);</strong></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong>tx.commit();</strong></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;user&nbsp;=&nbsp;(User)&nbsp;session.load(User.</span><span class="keyword">class</span><span>,&nbsp;user);</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(user.getAge()&nbsp;+&nbsp;</span><span class="string">"\t"</span><span>&nbsp;+&nbsp;&nbsp;user.getName()&nbsp;+&nbsp;</span><span class="string">"\t"</span><span>&nbsp;+&nbsp;user.getPhone());</span></li>
    <li><br />
    </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session.close();</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sessionFactory.close();</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li><span>}</span></li>
</ol>
</div>
<p>请注意：在实际测试过程中，如果数据库已经有数据存在，则不需要上面的黑题部分向数据库追加数据。</p>
<p>另外还请留意的是，光有<font color="#000000"><strong>session.save(user);</strong>而没有<strong>tx.commit();</strong>的话,数据不会被持久到数据库中的。</font></p>
<p>&nbsp;</p>
<p><font color="#000000"><span><strong><font color="#993300"><font color="#ff0000">方法2.复合主键字段独立到另一个类中。</font></font></strong></span></font></p>
<p><span><font color="#000000">UserPK.java(<strong><font color="#333333">需要实现Serializable接口，并定义equals()和hashCode()方法</font></strong>)</font></span></p>
<span><font color="#000000">
<div class="highlighter">
<ol class="highlighter-j">
    <li><span class="keyword">package</span><span>&nbsp;com.hb3.pack_04.model;</span></li>
    <li class="alt"><br />
    </li>
    <li><span class="keyword">import</span><span>&nbsp;java.io.Serializable;</span></li>
    <li class="alt"><br />
    </li>
    <li><span class="keyword">import</span><span>&nbsp;org.apache.commons.lang.builder.EqualsBuilder;</span></li>
    <li class="alt"><span class="keyword">import</span><span>&nbsp;org.apache.commons.lang.builder.HashCodeBuilder;</span></li>
    <li><br />
    </li>
    <li class="alt"><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;UserPK&nbsp;</span><span class="keyword">implements</span><span>&nbsp;Serializable&nbsp;{</span></li>
    <li><br />
    </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">final</span><span>&nbsp;</span><span class="keyword">long</span><span>&nbsp;serialVersionUID&nbsp;=&nbsp;-2457999265373664790L;</span></li>
    <li><br />
    </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;String&nbsp;name;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;String&nbsp;phone;</span></li>
    <li class="alt"><br />
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;String&nbsp;getName()&nbsp;{</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;name;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;setName(String&nbsp;name)&nbsp;{</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.name&nbsp;=&nbsp;name;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;String&nbsp;getPhone()&nbsp;{</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;phone;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;setPhone(String&nbsp;phone)&nbsp;{</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.phone&nbsp;=&nbsp;phone;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">boolean</span><span>&nbsp;equals(Object&nbsp;obj)&nbsp;{</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(obj&nbsp;==&nbsp;</span><span class="keyword">this</span><span>)&nbsp;{</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;</span><span class="keyword">true</span><span>;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(!(obj&nbsp;</span><span class="keyword">instanceof</span><span>&nbsp;User))&nbsp;{</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;</span><span class="keyword">false</span><span>;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UserPK&nbsp;pk&nbsp;=&nbsp;(UserPK)&nbsp;obj;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;</span><span class="keyword">new</span><span>&nbsp;EqualsBuilder()</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.append(</span><span class="keyword">this</span><span>.name,&nbsp;pk.getName())</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.append(</span><span class="keyword">this</span><span>.phone,&nbsp;pk.getPhone())</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.isEquals();</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">int</span><span>&nbsp;hashCode()&nbsp;{</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;</span><span class="keyword">new</span><span>&nbsp;HashCodeBuilder()</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.append(</span><span class="keyword">this</span><span>.name)</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.append(</span><span class="keyword">this</span><span>.phone)</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.toHashCode();</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li><span>}</span></li>
</ol>
</div>
</font></span>
<p><span><font color="#000000">User.java</font></span></p>
<span><font color="#000000">
<div class="highlighter">
<ol class="highlighter-j">
    <li><span class="keyword">package</span><span>&nbsp;com.hb3.pack_04.model;</span></li>
    <li class="alt"><br />
    </li>
    <li><span class="keyword">import</span><span>&nbsp;java.io.Serializable;</span></li>
    <li class="alt"><br />
    </li>
    <li><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;User&nbsp;</span><span class="keyword">implements</span><span>&nbsp;Serializable&nbsp;{</span></li>
    <li class="alt"><br />
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">final</span><span>&nbsp;</span><span class="keyword">long</span><span>&nbsp;serialVersionUID&nbsp;=&nbsp;-8630481462628539996L;</span></li>
    <li class="alt"><br />
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;UserPK&nbsp;userPK;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;Integer&nbsp;age;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;User()&nbsp;{</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li class="alt"><br />
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;UserPK&nbsp;getUserPK()&nbsp;{</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;userPK;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;setUserPK(UserPK&nbsp;userPK)&nbsp;{</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.userPK&nbsp;=&nbsp;userPK;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;Integer&nbsp;getAge()&nbsp;{</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;age;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;setAge(Integer&nbsp;age)&nbsp;{</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.age&nbsp;=&nbsp;age;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li><span>}</span></li>
</ol>
</div>
</font></span>
<p><span><font color="#000000">User.hbm.xml文件：</font></span></p>
<span><font color="#000000">
<div class="highlighter">
<ol class="highlighter-xml">
    <li><span class="tag">&lt;?</span><span class="tag-name">xml</span><span>&nbsp;</span><span class="attribute">version</span><span>=</span><span class="attribute-value">"1.0"</span><span>&nbsp;</span><span class="attribute">encoding</span><span>=</span><span class="attribute-value">"UTF-8"</span><span class="tag">?&gt;</span></li>
    <li class="alt"><br />
    </li>
    <li><span class="tag">&lt;!DOCTYPE&nbsp;hibernate-mapping&nbsp;PUBLIC</span></li>
    <li class="alt"><span class="tag">&nbsp;&nbsp;&nbsp;&nbsp;"-//Hibernate/Hibernate&nbsp;Mapping&nbsp;DTD&nbsp;3.0//EN"&nbsp;</span></li>
    <li><span class="tag">&nbsp;&nbsp;&nbsp;&nbsp;"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"&gt;</span></li>
    <li class="alt"><br />
    </li>
    <li><span class="tag">&lt;</span><span class="tag-name">hibernate-mapping</span><span class="tag">&gt;</span><span>&nbsp;</span></li>
    <li class="alt"><br />
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">class</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"com.hb3.pack_04.model.User"</span><span>&nbsp;</span><span class="attribute">table</span><span>=</span><span class="attribute-value">"user"</span><span class="tag">&gt;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">composite-id</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"userPK"</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">"com.hb3.pack_04.model.UserPK"</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">unsaved-value</span><span>=</span><span class="attribute-value">"any"</span><span class="tag">&gt;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">key-property</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"name"</span><span>&nbsp;</span></li>
    <li><span>&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;</span><span class="attribute">column</span><span>=</span><span class="attribute-value">"name"</span><span>&nbsp;</span></li>
    <li class="alt"><span>&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;</span><span class="attribute">type</span><span>=</span><span class="attribute-value">"java.lang.String"</span><span class="tag">/&gt;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">key-property</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"phone"</span><span>&nbsp;</span></li>
    <li class="alt"><span>&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;</span><span class="attribute">column</span><span>=</span><span class="attribute-value">"phone"</span><span>&nbsp;</span></li>
    <li><span>&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;</span><span class="attribute">type</span><span>=</span><span class="attribute-value">"java.lang.String"</span><span class="tag">/&gt;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">composite-id</span><span class="tag">&gt;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">property</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"age"</span><span>&nbsp;</span><span class="attribute">column</span><span>=</span><span class="attribute-value">"age"</span><span>&nbsp;</span><span class="attribute">type</span><span>=</span><span class="attribute-value">"java.lang.Integer"</span><span class="tag">/&gt;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">class</span><span class="tag">&gt;</span><span>&nbsp;</span></li>
    <li><br />
    </li>
    <li class="alt"><span class="tag">&lt;/</span><span class="tag-name">hibernate-mapping</span><span class="tag">&gt;</span></li>
</ol>
</div>
</font></span><span><font color="#000000">
<p class="alt"><span>hibernate.cfg.xml中修改：</span></p>
<p class="alt"><span>......</span></p>
<p class="alt"><span>&lt;mapping resource="com/hb3/pack_04/model/User.hbm.xml" /&gt;</span></p>
<p class="alt"><span>......</span></p>
<p class="alt">&nbsp;</p>
<p class="alt"><span>测试代码如下：</span></p>
<span>
<div class="highlighter">
<ol class="highlighter-j">
    <li><span class="keyword">package</span><span>&nbsp;com.hb3.pack_04;</span></li>
    <li class="alt"><br />
    </li>
    <li><span class="keyword">import</span><span>&nbsp;org.hibernate.Session;</span></li>
    <li class="alt"><span class="keyword">import</span><span>&nbsp;org.hibernate.SessionFactory;</span></li>
    <li><span class="keyword">import</span><span>&nbsp;org.hibernate.cfg.Configuration;</span></li>
    <li class="alt"><br />
    </li>
    <li><span class="keyword">import</span><span>&nbsp;com.hb3.pack_04.model.User;</span></li>
    <li class="alt"><span class="keyword">import</span><span>&nbsp;com.hb3.pack_04.model.UserPK;</span></li>
    <li><br />
    </li>
    <li class="alt"><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;BusinessService&nbsp;{</span></li>
    <li><br />
    </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;main(String[]&nbsp;args)&nbsp;{</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Configuration&nbsp;config&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;Configuration().configure();</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SessionFactory&nbsp;sessionFactory&nbsp;=&nbsp;config.buildSessionFactory();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Session&nbsp;session&nbsp;=&nbsp;sessionFactory.openSession();</span></li>
    <li><br />
    </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UserPK&nbsp;pk&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;UserPK();</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pk.setName(</span><span class="string">"shenbin"</span><span>);</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pk.setPhone(</span><span class="string">"0970123456"</span><span>);</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;User&nbsp;user&nbsp;=&nbsp;(User)&nbsp;session.load(User.</span><span class="keyword">class</span><span>,&nbsp;pk);</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(user.getAge()&nbsp;+&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="string">"\t"</span><span>&nbsp;+&nbsp;user.getUserPK().getName()&nbsp;+&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="string">"\t"</span><span>&nbsp;+&nbsp;user.getUserPK().getPhone());</span></li>
    <li><br />
    </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session.close();</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sessionFactory.close();</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li><span>}</span></li>
</ol>
</div>
</span></font></span></span>
<img src ="http://www.blogjava.net/super2/aggbug/237450.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/super2/" target="_blank">淘声依旧</a> 2008-10-29 19:34 <a href="http://www.blogjava.net/super2/archive/2008/10/29/237450.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hibernate3学习笔记(十二)｜Component</title><link>http://www.blogjava.net/super2/archive/2008/10/29/237451.html</link><dc:creator>淘声依旧</dc:creator><author>淘声依旧</author><pubDate>Wed, 29 Oct 2008 11:34:00 GMT</pubDate><guid>http://www.blogjava.net/super2/archive/2008/10/29/237451.html</guid><wfw:comment>http://www.blogjava.net/super2/comments/237451.html</wfw:comment><comments>http://www.blogjava.net/super2/archive/2008/10/29/237451.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/super2/comments/commentRss/237451.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/super2/services/trackbacks/237451.html</trackback:ping><description><![CDATA[<p>&nbsp;在MySQL中新建数据表User：</p>
<div class="highlighter">
<ol class="highlighter-xml">
    <li><span>CREATE&nbsp;TABLE&nbsp;user&nbsp;(</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;id&nbsp;INT(11)&nbsp;NOT&nbsp;NULL&nbsp;auto_increment&nbsp;PRIMARY&nbsp;KEY,</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;name&nbsp;VARCHAR(100)&nbsp;NOT&nbsp;NULL&nbsp;default&nbsp;'',</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;age&nbsp;INT,</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;email&nbsp;VARCHAR(100)&nbsp;NOT&nbsp;NULL</span></li>
    <li class="alt"><span>);</span></li>
</ol>
</div>
<p>按照最基本的映射策略的话，应该把User类设计成：</p>
<div class="highlighter">
<ol class="highlighter-j">
    <li><span class="keyword">package</span><span>&nbsp;onlyfun.caterpillar;&nbsp;</span></li>
    <li class="alt"><br />
    </li>
    <li><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;User&nbsp;{&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;Integer&nbsp;id;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;String&nbsp;name;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;</span><span class="keyword">int</span><span>&nbsp;age;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;String&nbsp;email;&nbsp;</span></li>
    <li class="alt"><br />
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;........&nbsp;</span></li>
    <li class="alt"><span>}</span></li>
</ol>
</div>
<p>然而由于业务上的需要，要把email字段升格成MailAddress类，例如：</p>
<div class="highlighter">
<ol class="highlighter-c">
    <li><span>package&nbsp;com.hb3.pack_05.model;</span></li>
    <li class="alt"><br />
    </li>
    <li><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;MailAddress&nbsp;{</span></li>
    <li class="alt"><br />
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;String&nbsp;email;</span></li>
    <li class="alt"><br />
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;MailAddress()&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;String&nbsp;getEmail()&nbsp;{</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;email;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li><br />
    </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;setEmail(String&nbsp;email)&nbsp;{</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.email&nbsp;=&nbsp;email;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;sendMail()&nbsp;{</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.</span><span class="keyword">out</span><span>.println(</span><span class="string">"Send&nbsp;mail&nbsp;to&nbsp;"</span><span>&nbsp;+&nbsp;email);</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li><span>}</span></li>
</ol>
</div>
<p>User.java</p>
<div class="highlighter">
<ol class="highlighter-j">
    <li><span class="keyword">package</span><span>&nbsp;com.hb3.pack_05.model;</span></li>
    <li class="alt"><br />
    </li>
    <li><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;User&nbsp;{</span></li>
    <li class="alt"><br />
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;Integer&nbsp;id;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;String&nbsp;name;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;Integer&nbsp;age;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;MailAddress&nbsp;mailAddress;</span></li>
    <li><br />
    </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;User()&nbsp;{</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li class="alt"><br />
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;Integer&nbsp;getId()&nbsp;{</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;id;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li class="alt"><br />
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;setId(Integer&nbsp;id)&nbsp;{</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.id&nbsp;=&nbsp;id;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li class="alt"><br />
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;String&nbsp;getName()&nbsp;{</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;name;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li class="alt"><br />
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;setName(String&nbsp;name)&nbsp;{</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.name&nbsp;=&nbsp;name;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;Integer&nbsp;getAge()&nbsp;{</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;age;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li class="alt"><br />
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;setAge(Integer&nbsp;age)&nbsp;{</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.age&nbsp;=&nbsp;age;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li class="alt"><br />
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;MailAddress&nbsp;getMailAddress()&nbsp;{</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;mailAddress;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li class="alt"><br />
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;setMailAddress(MailAddress&nbsp;mailAddress)&nbsp;{</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.mailAddress&nbsp;=&nbsp;mailAddress;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li class="alt"><span>}</span></li>
</ol>
</div>
<p><font color="#000000">User.hbm.xml文件：</font></p>
<font color="#000000">
<div class="highlighter">
<ol class="highlighter-xml">
    <li><span class="tag">&lt;?</span><span class="tag-name">xml</span><span>&nbsp;</span><span class="attribute">version</span><span>=</span><span class="attribute-value">"1.0"</span><span>&nbsp;</span><span class="attribute">encoding</span><span>=</span><span class="attribute-value">"UTF-8"</span><span class="tag">?&gt;</span></li>
    <li class="alt"><br />
    </li>
    <li><span class="tag">&lt;!DOCTYPE&nbsp;hibernate-mapping&nbsp;PUBLIC</span></li>
    <li class="alt"><span class="tag">&nbsp;&nbsp;&nbsp;&nbsp;"-//Hibernate/Hibernate&nbsp;Mapping&nbsp;DTD&nbsp;3.0//EN"&nbsp;</span></li>
    <li><span class="tag">&nbsp;&nbsp;&nbsp;&nbsp;"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"&gt;</span></li>
    <li class="alt"><br />
    </li>
    <li><span class="tag">&lt;</span><span class="tag-name">hibernate-mapping</span><span class="tag">&gt;</span></li>
    <li class="alt"><br />
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">class</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"com.hb3.pack_05.model.User"</span><span>&nbsp;</span><span class="attribute">table</span><span>=</span><span class="attribute-value">"user"</span><span class="tag">&gt;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">id</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"id"</span><span>&nbsp;</span><span class="attribute">column</span><span>=</span><span class="attribute-value">"id"</span><span>&nbsp;</span><span class="attribute">type</span><span>=</span><span class="attribute-value">"java.lang.Integer"</span><span class="tag">&gt;</span><span>&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">generator</span><span>&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">"native"</span><span class="tag">/&gt;</span><span>&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">id</span><span class="tag">&gt;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">property</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"name"</span><span>&nbsp;</span><span class="attribute">column</span><span>=</span><span class="attribute-value">"name"</span><span>&nbsp;</span><span class="attribute">type</span><span>=</span><span class="attribute-value">"java.lang.String"</span><span class="tag">/&gt;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">property</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"age"</span><span>&nbsp;</span><span class="attribute">column</span><span>=</span><span class="attribute-value">"age"</span><span>&nbsp;</span><span class="attribute">type</span><span>=</span><span class="attribute-value">"java.lang.Integer"</span><span class="tag">/&gt;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">component</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"mailAddress"</span><span>&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">"com.hb3.pack_05.model.MailAddress"</span><span class="tag">&gt;</span><span>&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">property</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"email"</span><span>&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">column</span><span>=</span><span class="attribute-value">"email"</span><span>&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">type</span><span>=</span><span class="attribute-value">"java.lang.String"</span><span>&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">not-null</span><span>=</span><span class="attribute-value">"true"</span><span class="tag">/&gt;</span><span>&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">component</span><span class="tag">&gt;</span><span>&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">class</span><span class="tag">&gt;</span><span>&nbsp;</span></li>
    <li class="alt"><span class="tag">&lt;/</span><span class="tag-name">hibernate-mapping</span><span class="tag">&gt;</span></li>
</ol>
</div>
</font>
<p><font color="#000000">修改hibernate.cfg.xml文件：</font></p>
<p><font color="#000000">......</font></p>
<p><font color="#000000">&lt;mapping resource="com/hb3/pack_05/model/User.hbm.xml" /&gt;</font></p>
<p><font color="#000000">......</font></p>
<p>&nbsp;</p>
<p>测试代码如下：</p>
<div class="highlighter">
<ol class="highlighter-j">
    <li><span class="keyword">package</span><span>&nbsp;com.hb3.pack_05;</span></li>
    <li class="alt"><br />
    </li>
    <li><span class="keyword">import</span><span>&nbsp;org.hibernate.Session;</span></li>
    <li class="alt"><span class="keyword">import</span><span>&nbsp;org.hibernate.SessionFactory;</span></li>
    <li><span class="keyword">import</span><span>&nbsp;org.hibernate.Transaction;</span></li>
    <li class="alt"><span class="keyword">import</span><span>&nbsp;org.hibernate.cfg.Configuration;</span></li>
    <li><br />
    </li>
    <li class="alt"><span class="keyword">import</span><span>&nbsp;com.hb3.pack_05.model.MailAddress;</span></li>
    <li><span class="keyword">import</span><span>&nbsp;com.hb3.pack_05.model.User;</span></li>
    <li class="alt"><br />
    </li>
    <li><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;BusinessService&nbsp;{</span></li>
    <li class="alt"><br />
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;main(String[]&nbsp;args)&nbsp;{</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Configuration&nbsp;config&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;Configuration().configure();</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SessionFactory&nbsp;sessionFactory&nbsp;=&nbsp;config.buildSessionFactory();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Session&nbsp;session&nbsp;=&nbsp;sessionFactory.openSession();</span></li>
    <li class="alt"><br />
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MailAddress&nbsp;mailAddress&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;MailAddress();</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mailAddress.setEmail(</span><span class="string">"bluelazysb@hotmail.com"</span><span>);</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;User&nbsp;user&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;User();</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;user.setName(</span><span class="string">"shenbin"</span><span>);</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;user.setAge(</span><span class="keyword">new</span><span>&nbsp;Integer(</span><span class="number">28</span><span>));</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;user.setMailAddress(mailAddress);</span></li>
    <li class="alt"><br />
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Transaction&nbsp;tx&nbsp;=&nbsp;session.beginTransaction();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session.save(user);</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session.flush();</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tx.commit();</span></li>
    <li><br />
    </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session.close();</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session&nbsp;=&nbsp;sessionFactory.openSession();</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;user&nbsp;=&nbsp;(User)&nbsp;session.load(User.</span><span class="keyword">class</span><span>,&nbsp;</span><span class="keyword">new</span><span>&nbsp;Integer(</span><span class="number">1</span><span>));</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(user.getAge()&nbsp;&nbsp;+&nbsp;</span><span class="string">"\t"</span><span>&nbsp;+</span></li>
    <li class="alt"><span>&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;user.getName()&nbsp;+&nbsp;</span><span class="string">"\t"</span><span>&nbsp;+</span></li>
    <li><span>&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;user.getMailAddress().getEmail());</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;user.getMailAddress().sendMail();</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session.close();</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sessionFactory.close();</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li class="alt"><span>}</span></li>
</ol>
</div>
<img src ="http://www.blogjava.net/super2/aggbug/237451.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/super2/" target="_blank">淘声依旧</a> 2008-10-29 19:34 <a href="http://www.blogjava.net/super2/archive/2008/10/29/237451.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hibernate3学习笔记(十)｜SQL支援 </title><link>http://www.blogjava.net/super2/archive/2008/10/29/237449.html</link><dc:creator>淘声依旧</dc:creator><author>淘声依旧</author><pubDate>Wed, 29 Oct 2008 11:33:00 GMT</pubDate><guid>http://www.blogjava.net/super2/archive/2008/10/29/237449.html</guid><wfw:comment>http://www.blogjava.net/super2/comments/237449.html</wfw:comment><comments>http://www.blogjava.net/super2/archive/2008/10/29/237449.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/super2/comments/commentRss/237449.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/super2/services/trackbacks/237449.html</trackback:ping><description><![CDATA[<p>示例代码如下：</p>
<div class="highlighter">
<ol class="highlighter-j">
    <li><span class="keyword">package</span><span>&nbsp;com.hb3.pack_01;</span></li>
    <li class="alt"><br />
    </li>
    <li><span class="keyword">import</span><span>&nbsp;java.util.Iterator;</span></li>
    <li class="alt"><br />
    </li>
    <li><span class="keyword">import</span><span>&nbsp;org.hibernate.Query;</span></li>
    <li class="alt"><span class="keyword">import</span><span>&nbsp;org.hibernate.SQLQuery;</span></li>
    <li><span class="keyword">import</span><span>&nbsp;org.hibernate.Session;</span></li>
    <li class="alt"><span class="keyword">import</span><span>&nbsp;org.hibernate.SessionFactory;</span></li>
    <li><span class="keyword">import</span><span>&nbsp;org.hibernate.cfg.Configuration;</span></li>
    <li class="alt"><br />
    </li>
    <li><span class="keyword">import</span><span>&nbsp;com.hb3.pack_01.model.User;</span></li>
    <li class="alt"><br />
    </li>
    <li><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;BusinessService&nbsp;{</span></li>
    <li class="alt"><br />
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;main(String[]&nbsp;args)&nbsp;{</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Configuration&nbsp;config&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;Configuration().configure();</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SessionFactory&nbsp;sessionFactory&nbsp;=&nbsp;config.buildSessionFactory();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Session&nbsp;session&nbsp;=&nbsp;sessionFactory.openSession();</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;sql&nbsp;=&nbsp;</span><span class="string">"select&nbsp;{user.*}&nbsp;from&nbsp;User&nbsp;user&nbsp;where&nbsp;user.age&nbsp;&gt;&nbsp;?"</span><span>;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SQLQuery&nbsp;sqlQuery&nbsp;=&nbsp;session.createSQLQuery(sql);</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sqlQuery.setParameter(</span><span class="number">0</span><span>,&nbsp;</span><span class="number">20</span><span>);</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sqlQuery.addEntity(</span><span class="string">"user"</span><span>,&nbsp;User.</span><span class="keyword">class</span><span>);</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Iterator&lt;?&gt;&nbsp;iterator&nbsp;=&nbsp;sqlQuery.list().iterator();</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">while</span><span>(iterator.hasNext())&nbsp;{</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;User&nbsp;user&nbsp;=&nbsp;(User)&nbsp;iterator.next();</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(user.getAge()&nbsp;+&nbsp;</span><span class="string">"\t"</span><span>&nbsp;+&nbsp;user.getName());</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Query&nbsp;query&nbsp;=&nbsp;session.getNamedQuery(</span><span class="string">"com.hb3.pack_01.model.User.SQLQueryUser"</span><span>);</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;query.setInteger(</span><span class="string">"age"</span><span>,&nbsp;</span><span class="number">20</span><span>);</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iterator&nbsp;=&nbsp;query.list().iterator();</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">while</span><span>(iterator.hasNext())&nbsp;{</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;User&nbsp;user&nbsp;=&nbsp;(User)&nbsp;iterator.next();</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(user.getAge()&nbsp;+&nbsp;</span><span class="string">"\t"</span><span>&nbsp;+&nbsp;user.getName());</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li class="alt"><br />
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session.close();</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sessionFactory.close();</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li class="alt"><span>}</span></li>
</ol>
</div>
<p>修改User.hbm.xml文件如下：</p>
<div class="highlighter">
<ol class="highlighter-xml">
    <li><span class="tag">&lt;?</span><span class="tag-name">xml</span><span>&nbsp;</span><span class="attribute">version</span><span>=</span><span class="attribute-value">"1.0"</span><span>&nbsp;</span><span class="attribute">encoding</span><span>=</span><span class="attribute-value">"UTF-8"</span><span class="tag">?&gt;</span></li>
    <li class="alt"><br />
    </li>
    <li><span class="tag">&lt;!DOCTYPE&nbsp;hibernate-mapping&nbsp;PUBLIC</span></li>
    <li class="alt"><span class="tag">&nbsp;&nbsp;&nbsp;&nbsp;"-//Hibernate/Hibernate&nbsp;Mapping&nbsp;DTD&nbsp;3.0//EN"&nbsp;</span></li>
    <li><span class="tag">&nbsp;&nbsp;&nbsp;&nbsp;"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"&gt;</span></li>
    <li class="alt"><br />
    </li>
    <li><span class="tag">&lt;</span><span class="tag-name">hibernate-mapping</span><span class="tag">&gt;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">class</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"com.hb3.pack_01.model.User"</span><span>&nbsp;</span><span class="attribute">table</span><span>=</span><span class="attribute-value">"user"</span><span>&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">dynamic-insert</span><span>=</span><span class="attribute-value">"true"</span><span>&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">dynamic-update</span><span>=</span><span class="attribute-value">"true"</span><span>&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&gt;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">id</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"id"</span><span>&nbsp;</span><span class="attribute">column</span><span>=</span><span class="attribute-value">"id"</span><span>&nbsp;</span><span class="attribute">type</span><span>=</span><span class="attribute-value">"java.lang.Integer"</span><span>&nbsp;</span><span class="attribute">unsaved-value</span><span>=</span><span class="attribute-value">"null"</span><span class="tag">&gt;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">generator</span><span>&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">"native"</span><span>&nbsp;</span><span class="tag">/&gt;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">id</span><span class="tag">&gt;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">property</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"name"</span><span>&nbsp;</span><span class="attribute">column</span><span>=</span><span class="attribute-value">"name"</span><span>&nbsp;</span><span class="attribute">type</span><span>=</span><span class="attribute-value">"java.lang.String"</span><span>&nbsp;</span><span class="tag">/&gt;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">property</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"age"</span><span>&nbsp;</span><span class="attribute">column</span><span>=</span><span class="attribute-value">"age"</span><span>&nbsp;</span><span class="attribute">type</span><span>=</span><span class="attribute-value">"java.lang.Integer"</span><span>&nbsp;</span><span class="tag">/&gt;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">class</span><span class="tag">&gt;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">query</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"com.hb3.pack_01.model.User.QueryUser"</span><span class="tag">&gt;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="cdata">&lt;![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span class="cdata">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;from&nbsp;User&nbsp;as&nbsp;user&nbsp;where&nbsp;user.age&nbsp;&gt;&nbsp;:minAge&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="cdata">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;]]&gt;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">query</span><span class="tag">&gt;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;<strong>&nbsp;&nbsp;</strong></span><span class="tag">&lt;</span><span class="tag-name">sql-query</span><strong><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"com.hb3.pack_01.model.User.SQLQueryUser"</span><span class="tag">&gt;</span></strong></li>
    <li class="alt"><strong><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="cdata">&lt;![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></strong></li>
    <li><span class="cdata"><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;select&nbsp;{user.*}&nbsp;from&nbsp;User&nbsp;user&nbsp;where&nbsp;user.age&nbsp;&gt;&nbsp;:age</strong></span></li>
    <li class="alt"><strong><span class="cdata">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;]]&gt;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></strong></li>
    <li><strong><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">return</span><span>&nbsp;</span><span class="attribute">alias</span><span>=</span><span class="attribute-value">"user"</span><span>&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">"com.hb3.pack_01.model.User"</span><span class="tag">/&gt;</span></strong></li>
    <li class="alt"><strong><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">sql-query</span><span class="tag">&gt;</span></strong></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="tag">&lt;/</span><span class="tag-name">hibernate-mapping</span><span class="tag">&gt;</span></li>
</ol>
</div>
<p>运行结果：</p>
<p>17:20:40,859&nbsp; WARN ConfigurationFactory:127 - No configuration
found. Configuring ehcache from ehcache-failsafe.xml&nbsp; found in the
classpath:
jar:file:/D:/Java/MyEclipse%206.0/workspace/hb3demo/ehcache-1.2.3.jar!/ehcache-failsafe.xml<br />
17:20:41,281&nbsp;
WARN EhCacheProvider:93 - Could not find configuration
[org.hibernate.cache.UpdateTimestampsCache]; using defaults.<br />
17:20:41,312&nbsp; WARN EhCacheProvider:93 - Could not find configuration [org.hibernate.cache.StandardQueryCache]; using defaults.<br />
Hibernate: select user.id as id0_0_, user.name as name0_0_, user.age as age0_0_ from User user where user.age &gt; ?<br />
28&nbsp;shenbin<br />
24&nbsp;chenyan<br />
23&nbsp;shenyi<br />
23&nbsp;yangye<br />
22&nbsp;chenyong<br />
Hibernate: select user.id as id0_0_, user.name as name0_0_, user.age as age0_0_ from User user where user.age &gt; ?<br />
28&nbsp;shenbin<br />
24&nbsp;chenyan<br />
23&nbsp;shenyi<br />
23&nbsp;yangye<br />
22&nbsp;chenyong</p>
<p>&nbsp;</p>
<p>另外，我们还可以自定义insert、update、delete时的SQL文而不使用Hibernate3自动生成的SQL文。</p>
<p>修改User.hbm.xml文件如下：</p>
<div class="highlighter">
<ol class="highlighter-xml">
    <li><span class="tag">&lt;?</span><span class="tag-name">xml</span><span>&nbsp;</span><span class="attribute">version</span><span>=</span><span class="attribute-value">"1.0"</span><span>&nbsp;</span><span class="attribute">encoding</span><span>=</span><span class="attribute-value">"UTF-8"</span><span class="tag">?&gt;</span></li>
    <li class="alt"><br />
    </li>
    <li><span class="tag">&lt;!DOCTYPE&nbsp;hibernate-mapping&nbsp;PUBLIC</span></li>
    <li class="alt"><span class="tag">&nbsp;&nbsp;&nbsp;&nbsp;"-//Hibernate/Hibernate&nbsp;Mapping&nbsp;DTD&nbsp;3.0//EN"&nbsp;</span></li>
    <li><span class="tag">&nbsp;&nbsp;&nbsp;&nbsp;"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"&gt;</span></li>
    <li class="alt"><br />
    </li>
    <li><span class="tag">&lt;</span><span class="tag-name">hibernate-mapping</span><span class="tag">&gt;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">class</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"com.hb3.pack_01.model.User"</span><span>&nbsp;</span><span class="attribute">table</span><span>=</span><span class="attribute-value">"user"</span><span>&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">dynamic-insert</span><span>=</span><span class="attribute-value">"true"</span><span>&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">dynamic-update</span><span>=</span><span class="attribute-value">"true"</span><span>&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&gt;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">id</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"id"</span><span>&nbsp;</span><span class="attribute">column</span><span>=</span><span class="attribute-value">"id"</span><span>&nbsp;</span><span class="attribute">type</span><span>=</span><span class="attribute-value">"java.lang.Integer"</span><span>&nbsp;</span><span class="attribute">unsaved-value</span><span>=</span><span class="attribute-value">"null"</span><span class="tag">&gt;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">generator</span><span>&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">"native"</span><span>&nbsp;</span><span class="tag">/&gt;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">id</span><span class="tag">&gt;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">property</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"name"</span><span>&nbsp;</span><span class="attribute">column</span><span>=</span><span class="attribute-value">"name"</span><span>&nbsp;</span><span class="attribute">type</span><span>=</span><span class="attribute-value">"java.lang.String"</span><span>&nbsp;</span><span class="tag">/&gt;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">property</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"age"</span><span>&nbsp;</span><span class="attribute">column</span><span>=</span><span class="attribute-value">"age"</span><span>&nbsp;</span><span class="attribute">type</span><span>=</span><span class="attribute-value">"java.lang.Integer"</span><span>&nbsp;</span><span class="tag">/&gt;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong>&nbsp;</strong></span><span class="tag">&lt;</span><span class="tag-name">sql-insert</span><span class="tag">&gt;</span></li>
    <li><strong><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comments">&lt;!--&nbsp;INSERT&nbsp;INTO&nbsp;user&nbsp;(name,&nbsp;age)&nbsp;VALUES&nbsp;(?,&nbsp;?)&nbsp;--&gt;</span></strong></li>
    <li class="alt"><span><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;INSERT&nbsp;INTO&nbsp;user&nbsp;VALUES&nbsp;(?,&nbsp;?)&nbsp;&nbsp;&nbsp;</strong></span></li>
    <li><strong><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">sql-insert</span><span class="tag">&gt;</span></strong></li>
    <li class="alt"><strong><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">sql-update</span><span class="tag">&gt;</span></strong></li>
    <li><strong><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UPDATE&nbsp;user&nbsp;SET&nbsp;</span><span class="attribute">name</span><span>=?,&nbsp;</span><span class="attribute">age</span><span>=?,&nbsp;WHERE&nbsp;</span><span class="attribute">id</span><span>=?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></strong></li>
    <li class="alt"><strong><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">sql-update</span><span class="tag">&gt;</span></strong></li>
    <li><strong><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">sql-delete</span><span class="tag">&gt;</span></strong></li>
    <li class="alt"><strong><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DELETE&nbsp;FROM&nbsp;user&nbsp;WHERE&nbsp;</span><span class="attribute">id</span><span>=?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></strong></li>
    <li><strong><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">sql-delete</span><span class="tag">&gt;</span></strong></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">class</span><span class="tag">&gt;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">query</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"com.hb3.pack_01.model.User.QueryUser"</span><span class="tag">&gt;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="cdata">&lt;![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span class="cdata">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;from&nbsp;User&nbsp;as&nbsp;user&nbsp;where&nbsp;user.age&nbsp;&gt;&nbsp;:minAge&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="cdata">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;]]&gt;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">query</span><span class="tag">&gt;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">sql-query</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"com.hb3.pack_01.model.User.SQLQueryUser"</span><span class="tag">&gt;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="cdata">&lt;![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span class="cdata">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;select&nbsp;{user.*}&nbsp;from&nbsp;User&nbsp;user&nbsp;where&nbsp;user.age&nbsp;&gt;&nbsp;:age</span></li>
    <li class="alt"><span class="cdata">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;]]&gt;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">return</span><span>&nbsp;</span><span class="attribute">alias</span><span>=</span><span class="attribute-value">"user"</span><span>&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">"com.hb3.pack_01.model.User"</span><span class="tag">/&gt;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">sql-query</span><span class="tag">&gt;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="tag">&lt;/</span><span class="tag-name">hibernate-mapping</span><span class="tag">&gt;</span></li>
</ol>
</div>
<p>示例代码：</p>
<div class="highlighter">
<ol class="highlighter-j">
    <li><span class="keyword">package</span><span>&nbsp;com.hb3.pack_01;</span></li>
    <li class="alt"><br />
    </li>
    <li><span class="keyword">import</span><span>&nbsp;org.hibernate.Session;</span></li>
    <li class="alt"><span class="keyword">import</span><span>&nbsp;org.hibernate.SessionFactory;</span></li>
    <li><span class="keyword">import</span><span>&nbsp;org.hibernate.Transaction;</span></li>
    <li class="alt"><span class="keyword">import</span><span>&nbsp;org.hibernate.cfg.Configuration;</span></li>
    <li><br />
    </li>
    <li class="alt"><span class="keyword">import</span><span>&nbsp;com.hb3.pack_01.model.User;</span></li>
    <li><br />
    </li>
    <li class="alt"><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;BusinessService&nbsp;{</span></li>
    <li><br />
    </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;main(String[]&nbsp;args)&nbsp;{</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Configuration&nbsp;config&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;Configuration().configure();</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SessionFactory&nbsp;sessionFactory&nbsp;=&nbsp;config.buildSessionFactory();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Session&nbsp;session&nbsp;=&nbsp;sessionFactory.openSession();</span></li>
    <li><br />
    </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;User&nbsp;user&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;User();</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;user.setName(</span><span class="string">"yanfeng"</span><span>);</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;user.setAge(</span><span class="number">21</span><span>);</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Transaction&nbsp;tx&nbsp;=&nbsp;session.beginTransaction();</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session.save(user);&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tx.commit();&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session.close();</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sessionFactory.close();</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li class="alt"><span>}</span></li>
</ol>
</div>
<p>测试结果如下：</p>
<p>17:29:03,781&nbsp; WARN ConfigurationFactory:127 - No configuration
found. Configuring ehcache from ehcache-failsafe.xml&nbsp; found in the
classpath:
jar:file:/D:/Java/MyEclipse%206.0/workspace/hb3demo/ehcache-1.2.3.jar!/ehcache-failsafe.xml<br />
17:29:04,328&nbsp;
WARN EhCacheProvider:93 - Could not find configuration
[org.hibernate.cache.UpdateTimestampsCache]; using defaults.<br />
17:29:04,359&nbsp; WARN EhCacheProvider:93 - Could not find configuration [org.hibernate.cache.StandardQueryCache]; using defaults.<br />
Hibernate: insert into user (name, age) values (?, ?)</p>
<p>&nbsp;</p>
<p>可见，在实行保存操作时的SQL确实是我们在配置文件中定义的SQL文。</p>
<img src ="http://www.blogjava.net/super2/aggbug/237449.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/super2/" target="_blank">淘声依旧</a> 2008-10-29 19:33 <a href="http://www.blogjava.net/super2/archive/2008/10/29/237449.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hibernate3学习笔记(八)｜DetachedCriteria</title><link>http://www.blogjava.net/super2/archive/2008/10/29/237447.html</link><dc:creator>淘声依旧</dc:creator><author>淘声依旧</author><pubDate>Wed, 29 Oct 2008 11:32:00 GMT</pubDate><guid>http://www.blogjava.net/super2/archive/2008/10/29/237447.html</guid><wfw:comment>http://www.blogjava.net/super2/comments/237447.html</wfw:comment><comments>http://www.blogjava.net/super2/archive/2008/10/29/237447.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/super2/comments/commentRss/237447.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/super2/services/trackbacks/237447.html</trackback:ping><description><![CDATA[<p>示例代码如下：</p>
<div class="highlighter">
<ol class="highlighter-j">
    <li><span class="keyword">package</span><span>&nbsp;com.hb3.pack_01;</span></li>
    <li class="alt"><br />
    </li>
    <li><span class="keyword">import</span><span>&nbsp;java.util.Iterator;</span></li>
    <li class="alt"><span class="keyword">import</span><span>&nbsp;java.util.List;</span></li>
    <li><br />
    </li>
    <li class="alt"><span class="keyword">import</span><span>&nbsp;org.hibernate.Criteria;</span></li>
    <li><span class="keyword">import</span><span>&nbsp;org.hibernate.Session;</span></li>
    <li class="alt"><span class="keyword">import</span><span>&nbsp;org.hibernate.SessionFactory;</span></li>
    <li><span class="keyword">import</span><span>&nbsp;org.hibernate.cfg.Configuration;</span></li>
    <li class="alt"><span class="keyword">import</span><span>&nbsp;org.hibernate.criterion.DetachedCriteria;</span></li>
    <li><span class="keyword">import</span><span>&nbsp;org.hibernate.criterion.Restrictions;</span></li>
    <li class="alt"><br />
    </li>
    <li><span class="keyword">import</span><span>&nbsp;com.hb3.pack_01.model.User;</span></li>
    <li class="alt"><br />
    </li>
    <li><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;BusinessService&nbsp;{</span></li>
    <li class="alt"><br />
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;main(String[]&nbsp;args)&nbsp;{</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Configuration&nbsp;config&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;Configuration().configure();</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SessionFactory&nbsp;sessionFactory&nbsp;=&nbsp;config.buildSessionFactory();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DetachedCriteria&nbsp;detchedCriteria&nbsp;=&nbsp;DetachedCriteria.forClass(User.</span><span class="keyword">class</span><span>);</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;detchedCriteria.add(Restrictions.ge(</span><span class="string">"age"</span><span>,</span><span class="keyword">new</span><span>&nbsp;Integer(</span><span class="number">20</span><span>)));</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Session&nbsp;session&nbsp;=&nbsp;sessionFactory.openSession();</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Criteria&nbsp;criteria&nbsp;=&nbsp;detchedCriteria.getExecutableCriteria(session);&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List&lt;?&gt;&nbsp;users&nbsp;=&nbsp;criteria.list();</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Iterator&lt;?&gt;&nbsp;iterator&nbsp;=&nbsp;&nbsp;users.iterator();</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span class="string">"id&nbsp;\t&nbsp;name/age"</span><span>);</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">while</span><span>(iterator.hasNext())&nbsp;{</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;User&nbsp;ur&nbsp;=&nbsp;(User)&nbsp;iterator.next();</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(ur.getId()&nbsp;+&nbsp;</span><span class="string">"&nbsp;\t&nbsp;"</span><span>&nbsp;+&nbsp;ur.getName()&nbsp;+&nbsp;</span><span class="string">"/"</span><span>&nbsp;+&nbsp;ur.getAge());&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session.close();</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sessionFactory.close();</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li class="alt"><span>}</span></li>
</ol>
</div>
<p>Criteria和Session绑定的，但DetachedCriteria则不同。</p>
<p>这是在Hibernate 3中新增的类，目的是为了能够重复使用Criteria。其使用方法请参看前面对Criteria的介绍：</p>
<img src ="http://www.blogjava.net/super2/aggbug/237447.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/super2/" target="_blank">淘声依旧</a> 2008-10-29 19:32 <a href="http://www.blogjava.net/super2/archive/2008/10/29/237447.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hibernate3学习笔记(九)｜Query及HQL</title><link>http://www.blogjava.net/super2/archive/2008/10/29/237448.html</link><dc:creator>淘声依旧</dc:creator><author>淘声依旧</author><pubDate>Wed, 29 Oct 2008 11:32:00 GMT</pubDate><guid>http://www.blogjava.net/super2/archive/2008/10/29/237448.html</guid><wfw:comment>http://www.blogjava.net/super2/comments/237448.html</wfw:comment><comments>http://www.blogjava.net/super2/archive/2008/10/29/237448.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/super2/comments/commentRss/237448.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/super2/services/trackbacks/237448.html</trackback:ping><description><![CDATA[<p>示例代码如下：</p>
<div class="highlighter">
<ol class="highlighter-j">
    <li><span class="keyword">package</span><span>&nbsp;com.hb3.pack_01;</span></li>
    <li class="alt"><br />
    </li>
    <li><span class="keyword">import</span><span>&nbsp;java.util.Iterator;</span></li>
    <li class="alt"><span class="keyword">import</span><span>&nbsp;java.util.List;</span></li>
    <li><br />
    </li>
    <li class="alt"><span class="keyword">import</span><span>&nbsp;org.hibernate.Query;</span></li>
    <li><span class="keyword">import</span><span>&nbsp;org.hibernate.Session;</span></li>
    <li class="alt"><span class="keyword">import</span><span>&nbsp;org.hibernate.SessionFactory;</span></li>
    <li><span class="keyword">import</span><span>&nbsp;org.hibernate.Transaction;</span></li>
    <li class="alt"><span class="keyword">import</span><span>&nbsp;org.hibernate.cfg.Configuration;</span></li>
    <li><br />
    </li>
    <li class="alt"><span class="keyword">import</span><span>&nbsp;com.hb3.pack_01.model.User;</span></li>
    <li><span class="keyword">import</span><span>&nbsp;com.hb3.pack_01.model.UserBak;</span></li>
    <li class="alt"><br />
    </li>
    <li><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;BusinessService&nbsp;{</span></li>
    <li class="alt"><br />
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;main(String[]&nbsp;args)&nbsp;{</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Configuration&nbsp;config&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;Configuration().configure();</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SessionFactory&nbsp;sessionFactory&nbsp;=&nbsp;config.buildSessionFactory();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Session&nbsp;session&nbsp;=&nbsp;sessionFactory.openSession();</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Query&nbsp;query&nbsp;=&nbsp;session.createQuery(</span><span class="string">"from&nbsp;com.hb3.pack_01.model.User&nbsp;user&nbsp;order&nbsp;by&nbsp;user.age&nbsp;desc,&nbsp;user.name"</span><span>);</span><span class="comment">//[==&nbsp;from&nbsp;User] </span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printUserInfo(query.list());</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;query&nbsp;=&nbsp;session.createQuery(</span><span class="string">"select&nbsp;new&nbsp;com.hb3.pack_01.model.UserBak(user.name,&nbsp;user.age)&nbsp;from&nbsp;User&nbsp;as&nbsp;user"</span><span>);</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Iterator&lt;?&gt;&nbsp;iterator&nbsp;=&nbsp;query.list().iterator();</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span class="string">"class_name&nbsp;\t\t&nbsp;name/age"</span><span>);</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">while</span><span>&nbsp;(iterator.hasNext())&nbsp;{</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UserBak&nbsp;userbak&nbsp;=&nbsp;(UserBak)&nbsp;iterator.next();</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(userbak.getClz()&nbsp;+&nbsp;</span><span class="string">"&nbsp;\t&nbsp;"</span><span>&nbsp;+&nbsp;userbak.getName()&nbsp;+&nbsp;</span><span class="string">"/"</span><span>&nbsp;+&nbsp;userbak.getAge());</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;query&nbsp;=&nbsp;session.createQuery(</span><span class="string">"select&nbsp;upper(user.name)&nbsp;from&nbsp;User&nbsp;as&nbsp;user&nbsp;where&nbsp;(user.age/2&nbsp;&gt;=&nbsp;?)&nbsp;and&nbsp;(user.age&nbsp;is&nbsp;not&nbsp;null)"</span><span>);&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;query.setInteger(</span><span class="number">0</span><span>,&nbsp;</span><span class="number">13</span><span>);</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List&lt;?&gt;&nbsp;names&nbsp;=&nbsp;query.list();</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iterator&nbsp;=&nbsp;&nbsp;names.iterator();</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">while</span><span>(iterator.hasNext())&nbsp;{</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(iterator.next());</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;query&nbsp;=&nbsp;session.createQuery(</span><span class="string">"select&nbsp;user.name,&nbsp;user.age&nbsp;from&nbsp;User&nbsp;as&nbsp;user&nbsp;where&nbsp;user.age&nbsp;&gt;&nbsp;:minAge"</span><span>);&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;query.setInteger(</span><span class="string">"minAge"</span><span>,&nbsp;</span><span class="number">25</span><span>);</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;names&nbsp;=&nbsp;query.list();</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iterator&nbsp;=&nbsp;&nbsp;names.iterator();</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">while</span><span>(iterator.hasNext())&nbsp;{</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Object[]&nbsp;obj&nbsp;=&nbsp;(Object[])&nbsp;iterator.next();</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(obj[</span><span class="number">0</span><span>]&nbsp;+&nbsp;</span><span class="string">"\t"</span><span>&nbsp;+&nbsp;obj[</span><span class="number">1</span><span>]);</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;query&nbsp;=&nbsp;session.getNamedQuery(</span><span class="string">"com.hb3.pack_01.model.User.QueryUser"</span><span>);&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;query.setInteger(</span><span class="string">"minAge"</span><span>,&nbsp;</span><span class="number">25</span><span>);</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printUserInfo(query.list());</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Transaction&nbsp;tx=&nbsp;session.beginTransaction();</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;query&nbsp;=&nbsp;session.createQuery(</span><span class="string">"update&nbsp;User&nbsp;set&nbsp;age=24&nbsp;where&nbsp;name='chenyan'"</span><span>);</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;query.executeUpdate();</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tx.commit();</span></li>
    <li><br />
    </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tx=&nbsp;session.beginTransaction();</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;query&nbsp;=&nbsp;session.createQuery(</span><span class="string">"delete&nbsp;User&nbsp;where&nbsp;name='yaobin'"</span><span>);</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;query.executeUpdate();</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tx.commit();</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session.close();</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sessionFactory.close();</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;printUserInfo(List&lt;?&gt;&nbsp;users){</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Iterator&lt;?&gt;&nbsp;iterator&nbsp;=&nbsp;users.iterator();</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span class="string">"id&nbsp;\t&nbsp;name/age"</span><span>);</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">while</span><span>&nbsp;(iterator.hasNext())&nbsp;{</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;User&nbsp;user&nbsp;=&nbsp;(User)&nbsp;iterator.next();</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(user.getId()&nbsp;+&nbsp;</span><span class="string">"&nbsp;\t&nbsp;"</span><span>&nbsp;+&nbsp;user.getName()&nbsp;+&nbsp;</span><span class="string">"/"</span><span>&nbsp;+&nbsp;user.getAge());</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li class="alt"><span>}</span></li>
</ol>
</div>
<p>修改User.hbm.xml文件;</p>
<div class="highlighter">
<ol class="highlighter-xml">
    <li><span class="tag">&lt;?</span><span class="tag-name">xml</span><span>&nbsp;</span><span class="attribute">version</span><span>=</span><span class="attribute-value">"1.0"</span><span>&nbsp;</span><span class="attribute">encoding</span><span>=</span><span class="attribute-value">"UTF-8"</span><span class="tag">?&gt;</span></li>
    <li class="alt"><br />
    </li>
    <li><span class="tag">&lt;!DOCTYPE&nbsp;hibernate-mapping&nbsp;PUBLIC</span></li>
    <li class="alt"><span class="tag">&nbsp;&nbsp;&nbsp;&nbsp;"-//Hibernate/Hibernate&nbsp;Mapping&nbsp;DTD&nbsp;3.0//EN"&nbsp;</span></li>
    <li><span class="tag">&nbsp;&nbsp;&nbsp;&nbsp;"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"&gt;</span></li>
    <li class="alt"><br />
    </li>
    <li><span class="tag">&lt;</span><span class="tag-name">hibernate-mapping</span><span class="tag">&gt;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">class</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"com.hb3.pack_01.model.User"</span><span>&nbsp;</span><span class="attribute">table</span><span>=</span><span class="attribute-value">"user"</span><span>&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">dynamic-insert</span><span>=</span><span class="attribute-value">"true"</span><span>&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">dynamic-update</span><span>=</span><span class="attribute-value">"true"</span><span>&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&gt;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">id</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"id"</span><span>&nbsp;</span><span class="attribute">column</span><span>=</span><span class="attribute-value">"id"</span><span>&nbsp;</span><span class="attribute">type</span><span>=</span><span class="attribute-value">"java.lang.Integer"</span><span>&nbsp;</span><span class="attribute">unsaved-value</span><span>=</span><span class="attribute-value">"null"</span><span class="tag">&gt;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">generator</span><span>&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">"native"</span><span>&nbsp;</span><span class="tag">/&gt;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">id</span><span class="tag">&gt;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">property</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"name"</span><span>&nbsp;</span><span class="attribute">column</span><span>=</span><span class="attribute-value">"name"</span><span>&nbsp;</span><span class="attribute">type</span><span>=</span><span class="attribute-value">"java.lang.String"</span><span>&nbsp;</span><span class="tag">/&gt;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">property</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"age"</span><span>&nbsp;</span><span class="attribute">column</span><span>=</span><span class="attribute-value">"age"</span><span>&nbsp;</span><span class="attribute">type</span><span>=</span><span class="attribute-value">"java.lang.Integer"</span><span>&nbsp;</span><span class="tag">/&gt;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">class</span><span class="tag">&gt;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;<strong>&nbsp;</strong></span><span class="tag">&lt;</span><strong><span>query&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"com.hb3.pack_01.model.User.QueryUser"</span><span class="tag">&gt;</span></strong></li>
    <li class="alt"><strong><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="cdata">&lt;![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></strong></li>
    <li><span class="cdata"><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;from&nbsp;User&nbsp;as&nbsp;user&nbsp;where&nbsp;user.age&nbsp;&gt;&nbsp;&nbsp;:minAge&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</strong></span></li>
    <li class="alt"><strong><span class="cdata">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;]]&gt;</span></strong></li>
    <li><strong><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">query</span><span class="tag">&gt;</span></strong></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span class="tag">&lt;/</span><span class="tag-name">hibernate-mapping</span><span class="tag">&gt;</span></li>
</ol>
</div>
<p>新建UserBak类</p>
<div class="highlighter">
<ol class="highlighter-j">
    <li><span class="keyword">package</span><span>&nbsp;com.hb3.pack_01.model;</span></li>
    <li class="alt"><br />
    </li>
    <li><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;UserBak&nbsp;{</span></li>
    <li class="alt"><br />
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;String&nbsp;clz&nbsp;=&nbsp;</span><span class="string">"UserBak"</span><span>;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;String&nbsp;name;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;Integer&nbsp;age;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;UserBak()&nbsp;{</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;UserBak(String&nbsp;name,&nbsp;Integer&nbsp;age)&nbsp;{</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.name&nbsp;=&nbsp;name;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.age&nbsp;=&nbsp;age;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;String&nbsp;getName()&nbsp;{</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;name;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;setName(String&nbsp;name)&nbsp;{</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.name&nbsp;=&nbsp;name;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;Integer&nbsp;getAge()&nbsp;{</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;age;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;setAge(Integer&nbsp;age)&nbsp;{</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.age&nbsp;=&nbsp;age;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;String&nbsp;getClz()&nbsp;{</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;clz;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;setClz(String&nbsp;clz)&nbsp;{</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.clz&nbsp;=&nbsp;clz;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span></li>
    <li><span>}</span></li>
</ol>
</div>
<p>运行结果：</p>
<p>16:53:02,015&nbsp; WARN ConfigurationFactory:127 - No configuration
found. Configuring ehcache from ehcache-failsafe.xml&nbsp; found in the
classpath:
jar:file:/D:/Java/MyEclipse%206.0/workspace/hb3demo/ehcache-1.2.3.jar!/ehcache-failsafe.xml<br />
16:53:02,437&nbsp;
WARN EhCacheProvider:93 - Could not find configuration
[org.hibernate.cache.UpdateTimestampsCache]; using defaults.<br />
16:53:02,468&nbsp; WARN EhCacheProvider:93 - Could not find configuration [org.hibernate.cache.StandardQueryCache]; using defaults.<br />
Hibernate:
select user0_.id as id0_, user0_.name as name0_, user0_.age as age0_
from user user0_ order by user0_.age desc, user0_.name<br />
id &nbsp; name/age<br />
1 &nbsp; shenbin/28<br />
2 &nbsp; chenyan/26<br />
9 &nbsp; shenyi/23<br />
10 &nbsp; yangye/23<br />
11 &nbsp; chenyong/22<br />
13 &nbsp; chendong/null<br />
12 &nbsp; yaobin/null<br />
Hibernate: select user0_.name as col_0_0_, user0_.age as col_1_0_ from user user0_<br />
class_name &nbsp;&nbsp; name/age<br />
UserBak &nbsp; shenbin/28<br />
UserBak &nbsp; chenyan/26<br />
UserBak &nbsp; shenyi/23<br />
UserBak &nbsp; yangye/23<br />
UserBak &nbsp; chenyong/22<br />
UserBak &nbsp; yaobin/null<br />
UserBak &nbsp; chendong/null<br />
Hibernate: select upper(user0_.name) as col_0_0_ from user user0_ where user0_.age/2&gt;=? and (user0_.age is not null)<br />
SHENBIN<br />
CHENYAN<br />
Hibernate: select user0_.name as col_0_0_, user0_.age as col_1_0_ from user user0_ where user0_.age&gt;?<br />
shenbin&nbsp;28<br />
chenyan&nbsp;26<br />
Hibernate: select user0_.id as id0_, user0_.name as name0_, user0_.age as age0_ from user user0_ where user0_.age&gt;?<br />
id &nbsp; name/age<br />
1 &nbsp; shenbin/28<br />
2 &nbsp; chenyan/26<br />
Hibernate: update user set age=24 where name='chenyan'<br />
Hibernate: delete from user where name='yaobin'</p>
<p>&nbsp;</p>
<p>注意点：</p>
<p>1.在Hibernate3中，可以直接使用HQL指定更新或刪除。</p>
<p>2.使用HQL可以自定义返回的类型。（如:UserBak）</p>
<p>3.使用HQL可以结合各种查询条件，使用where子句限定查询条件，除了 = 运算之外，还有 &gt;、&gt;=、&lt;、&lt;=、!= 或 &lt;&gt;等比较运算：</p>
<p><strong>Query query = session.createQuery("from User user where user.age between 20 and 30");</strong></p>
<p><strong>Query query = session.createQuery("from User user where user.name in('caterpillar', 'momor')");</strong></p>
<p><strong>Query query = session.createQuery("from User user where user.name like 'cater%'");</strong></p>
<p><strong>Query query = session.createQuery(<span class="code-quote">"select avg(user.age) from User as user"</span>);</strong></p>
<p><strong>Query query = session.createQuery(<span class="code-quote">"select count(*) from User as user"</span>);</strong></p>
<p>也可以配合GROUP BY子句，假设在数据库表中追加一个Sex字段。</p>
<p><strong>Query query = session.createQuery("select user.sex, avg(user.age) from User user group by user.sex");</strong></p>
<p>运行结果可能是：</p>
<pre class="code-java">+-------------------------------+ <br />
|    sex       |    avg(age)    | <br />
+-------------------------------+ <br />
|    male      |    30          | <br />
+-------------------------------+ <br />
|    female    |    25          | <br />
+-------------------------------+</pre>
<p>可以結合having子句,例如只将平均年龄大于20的资料分组显示出来：<br />
<strong>Query query =
session.createQuery("select user.sex, avg(user.age) from User user
group by user.sex having avg(user.age) &gt; 20");</strong></p>
<p><strong><font color="#800000">使用HQL是官方推荐的查询方式。</font></strong></p>
<img src ="http://www.blogjava.net/super2/aggbug/237448.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/super2/" target="_blank">淘声依旧</a> 2008-10-29 19:32 <a href="http://www.blogjava.net/super2/archive/2008/10/29/237448.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hibernate3学习笔记(七)｜Criteria Queries </title><link>http://www.blogjava.net/super2/archive/2008/10/29/237446.html</link><dc:creator>淘声依旧</dc:creator><author>淘声依旧</author><pubDate>Wed, 29 Oct 2008 11:31:00 GMT</pubDate><guid>http://www.blogjava.net/super2/archive/2008/10/29/237446.html</guid><wfw:comment>http://www.blogjava.net/super2/comments/237446.html</wfw:comment><comments>http://www.blogjava.net/super2/archive/2008/10/29/237446.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/super2/comments/commentRss/237446.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/super2/services/trackbacks/237446.html</trackback:ping><description><![CDATA[<p>示例代码如下：</p>
<div>
<ol>
    <li>package&nbsp;com.hb3.pack_01;</li>
    <li><br />
    </li>
    <li>import&nbsp;java.util.Iterator;</li>
    <li>import&nbsp;java.util.List;</li>
    <li><br />
    </li>
    <li>import&nbsp;org.hibernate.Criteria;</li>
    <li>import&nbsp;org.hibernate.Hibernate;</li>
    <li>import&nbsp;org.hibernate.Session;</li>
    <li>import&nbsp;org.hibernate.SessionFactory;</li>
    <li>import&nbsp;org.hibernate.cfg.Configuration;</li>
    <li>import&nbsp;org.hibernate.criterion.Example;</li>
    <li>import&nbsp;org.hibernate.criterion.Order;</li>
    <li>import&nbsp;org.hibernate.criterion.ProjectionList;</li>
    <li>import&nbsp;org.hibernate.criterion.Projections;</li>
    <li>import&nbsp;org.hibernate.criterion.Property;</li>
    <li>import&nbsp;org.hibernate.criterion.Restrictions;</li>
    <li>import&nbsp;org.hibernate.type.Type;</li>
    <li><br />
    </li>
    <li>import&nbsp;com.hb3.pack_01.model.User;</li>
    <li><br />
    </li>
    <li>public&nbsp;class&nbsp;BusinessService&nbsp;{</li>
    <li><br />
    </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;void&nbsp;main(String[]&nbsp;args)&nbsp;{</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Configuration&nbsp;config&nbsp;=&nbsp;new&nbsp;Configuration().configure();</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SessionFactory&nbsp;sessionFactory&nbsp;=&nbsp;config.buildSessionFactory();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Session&nbsp;session&nbsp;=&nbsp;sessionFactory.openSession();</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Criteria&nbsp;criteria&nbsp;=&nbsp;session.createCriteria(User.class);</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;criteria.addOrder(Order.asc("age"));</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List&lt;?&gt;&nbsp;users&nbsp;=&nbsp;criteria.list();</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printUserInfo(users);</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;criteria&nbsp;=&nbsp;session.createCriteria(User.class);</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;criteria.add(Restrictions.gt("age",&nbsp;new&nbsp;Integer(22)));</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;criteria.add(Restrictions.lt("age",&nbsp;new&nbsp;Integer(27)));</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;users&nbsp;=&nbsp;criteria.list();</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printUserInfo(users);</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;criteria&nbsp;=&nbsp;session.createCriteria(User.class);</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;criteria.add(Restrictions.or(&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Restrictions.eq("age",&nbsp;new&nbsp;Integer(23)),&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Restrictions.isNull("age")&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;));&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;users&nbsp;=&nbsp;criteria.list();</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printUserInfo(users);</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;criteria&nbsp;=&nbsp;session.createCriteria(User.class);</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;criteria.add(Restrictions.sqlRestriction("{alias}.name&nbsp;LIKE&nbsp;(?)",&nbsp;"%ya%",&nbsp;Hibernate.STRING));</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;users&nbsp;=&nbsp;criteria.list();</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printUserInfo(users);</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;criteria&nbsp;=&nbsp;session.createCriteria(User.class);</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Integer[]&nbsp;ages&nbsp;=&nbsp;{new&nbsp;Integer(26),&nbsp;new&nbsp;Integer(28)};</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Type[]&nbsp;types&nbsp;=&nbsp;{Hibernate.INTEGER,&nbsp;Hibernate.INTEGER};</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;criteria.add(Restrictions.sqlRestriction("{alias}.age&nbsp;BETWEEN&nbsp;(?)&nbsp;AND&nbsp;(?)",&nbsp;ages,&nbsp;types));</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;users&nbsp;=&nbsp;criteria.list();</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printUserInfo(users);</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;criteria&nbsp;=&nbsp;session.createCriteria(User.class);</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;criteria.setFirstResult(3);&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;criteria.setMaxResults(2);</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;users&nbsp;=&nbsp;criteria.list();</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printUserInfo(users);</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;criteria&nbsp;=&nbsp;session.createCriteria(User.class);</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;criteria.setProjection(Projections.rowCount());</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;users&nbsp;=&nbsp;criteria.list();</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Iterator&lt;?&gt;&nbsp;iterator&nbsp;=&nbsp;users.iterator();</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(iterator.hasNext())&nbsp;{</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(iterator.next());</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;criteria&nbsp;=&nbsp;session.createCriteria(User.class);</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;criteria.setProjection(Projections.avg("age"));</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;users&nbsp;=&nbsp;criteria.list();</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iterator&nbsp;=&nbsp;users.iterator();</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(iterator.hasNext())&nbsp;{</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(iterator.next());</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;criteria&nbsp;=&nbsp;session.createCriteria(User.class);</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;criteria.setProjection(Projections.groupProperty("age"));</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;users&nbsp;=&nbsp;criteria.list();</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iterator&nbsp;=&nbsp;users.iterator();</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(iterator.hasNext())&nbsp;{</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(iterator.next());</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ProjectionList&nbsp;projectionList&nbsp;=&nbsp;Projections.projectionList();</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;projectionList.add(Projections.groupProperty("age"));</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;projectionList.add(Projections.groupProperty("name"));</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;projectionList.add(Projections.rowCount());</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;criteria&nbsp;=&nbsp;session.createCriteria(User.class);</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;criteria.setProjection(projectionList);</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;users&nbsp;=&nbsp;criteria.list();</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iterator&nbsp;=&nbsp;&nbsp;users.iterator();</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(iterator.hasNext())&nbsp;{</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Object[]&nbsp;o&nbsp;=&nbsp;(Object[])&nbsp;iterator.next();</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(o[0]&nbsp;+&nbsp;""t"&nbsp;+&nbsp;o[1]&nbsp;+&nbsp;""t"&nbsp;+&nbsp;o[2]);</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;criteria&nbsp;=&nbsp;session.createCriteria(User.class);</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;criteria.add(Property.forName("name").like("%ya%"));</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;criteria.addOrder(Property.forName("age").desc());</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;users&nbsp;=&nbsp;criteria.list();</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printUserInfo(users);</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;User&nbsp;user&nbsp;=&nbsp;new&nbsp;User();</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;user.setAge(new&nbsp;Integer(26));</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;criteria&nbsp;=&nbsp;session.createCriteria(User.class);</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;criteria.add(Example.create(user));</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;users&nbsp;=&nbsp;criteria.list();</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printUserInfo(users);</li>
    <li><br />
    </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session.close();</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sessionFactory.close();</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;}</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;void&nbsp;printUserInfo(List&lt;?&gt;&nbsp;users){</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Iterator&lt;?&gt;&nbsp;iterator&nbsp;=&nbsp;users.iterator();</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("id&nbsp;"t&nbsp;name/age");</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(iterator.hasNext())&nbsp;{</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;User&nbsp;user&nbsp;=&nbsp;(User)&nbsp;iterator.next();</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(user.getId()&nbsp;+&nbsp;"&nbsp;"t&nbsp;"&nbsp;+&nbsp;user.getName()&nbsp;+&nbsp;"/"&nbsp;+&nbsp;user.getAge());</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;}</li>
    <li>}</li>
</ol>
</div>
<p>运行结果如下：</p>
<p>15:41:36,312&nbsp; WARN ConfigurationFactory:127 - No configuration
found. Configuring ehcache from ehcache-failsafe.xml&nbsp; found in the
classpath:
jar:file:/D:/Java/MyEclipse%206.0/workspace/hb3demo/ehcache-1.2.3.jar!/ehcache-failsafe.xml<br />
15:41:36,750&nbsp;
WARN EhCacheProvider:93 - Could not find configuration
[org.hibernate.cache.UpdateTimestampsCache]; using defaults.<br />
15:41:36,781&nbsp; WARN EhCacheProvider:93 - Could not find configuration [org.hibernate.cache.StandardQueryCache]; using defaults.<br />
Hibernate: select this_.id as id0_0_, this_.name as name0_0_, this_.age as age0_0_ from user this_ order by this_.age asc<br />
id &nbsp; name/age<br />
11 &nbsp; yangye/null<br />
12 &nbsp; yangye/null<br />
9 &nbsp; yangye/23<br />
10 &nbsp; yangye/23<br />
2 &nbsp; chenyan/26<br />
1 &nbsp; shenbin/28<br />
Hibernate:
select this_.id as id0_0_, this_.name as name0_0_, this_.age as age0_0_
from user this_ where this_.age&gt;? and this_.age&lt;?<br />
id &nbsp; name/age<br />
2 &nbsp; chenyan/26<br />
9 &nbsp; yangye/23<br />
10 &nbsp; yangye/23<br />
Hibernate:
select this_.id as id0_0_, this_.name as name0_0_, this_.age as age0_0_
from user this_ where (this_.age=? or this_.age is null)<br />
id &nbsp; name/age<br />
9 &nbsp; yangye/23<br />
10 &nbsp; yangye/23<br />
11 &nbsp; yangye/null<br />
12 &nbsp; yangye/null<br />
Hibernate: select this_.id as id0_0_, this_.name as name0_0_, this_.age as age0_0_ from user this_ where this_.name LIKE (?)<br />
id &nbsp; name/age<br />
2 &nbsp; chenyan/26<br />
9 &nbsp; yangye/23<br />
10 &nbsp; yangye/23<br />
11 &nbsp; yangye/null<br />
12 &nbsp; yangye/null<br />
Hibernate:
select this_.id as id0_0_, this_.name as name0_0_, this_.age as age0_0_
from user this_ where this_.age BETWEEN (?) AND (?)<br />
id &nbsp; name/age<br />
1 &nbsp; shenbin/28<br />
2 &nbsp; chenyan/26<br />
Hibernate: select this_.id as id0_0_, this_.name as name0_0_, this_.age as age0_0_ from user this_ limit ?, ?<br />
id &nbsp; name/age<br />
10 &nbsp; yangye/23<br />
11 &nbsp; yangye/null<br />
Hibernate: select count(*) as y0_ from user this_<br />
6<br />
Hibernate: select avg(this_.age) as y0_ from user this_<br />
25.0<br />
Hibernate: select this_.age as y0_ from user this_ group by this_.age<br />
null<br />
23<br />
26<br />
28<br />
Hibernate: select this_.age as y0_, this_.name as y1_, count(*) as y2_ from user this_ group by this_.age, this_.name<br />
null&nbsp;yangye&nbsp;2<br />
23&nbsp;yangye&nbsp;2<br />
26&nbsp;chenyan&nbsp;1<br />
28&nbsp;shenbin&nbsp;1<br />
Hibernate:
select this_.id as id0_0_, this_.name as name0_0_, this_.age as age0_0_
from user this_ where this_.name like ? order by this_.age desc<br />
id &nbsp; name/age<br />
2 &nbsp; chenyan/26<br />
9 &nbsp; yangye/23<br />
10 &nbsp; yangye/23<br />
11 &nbsp; yangye/null<br />
12 &nbsp; yangye/null<br />
Hibernate: select this_.id as id0_0_, this_.name as name0_0_, this_.age as age0_0_ from user this_ where (this_.age=?)<br />
id &nbsp; name/age<br />
2 &nbsp; chenyan/26</p>
<p>注意：</p>
<p><font color="#993300">Restrictions的几个常用限定查询方法如下表所示：</font></p>
<table>
    <tbody>
        <tr>
            <th><font color="#993300">方法</font></th>
            <th><font color="#993300">说明</font></th>
        </tr>
        <tr>
            <td><font color="#993300">Restrictions.eq</font></td>
            <td><font color="#993300">等于</font></td>
        </tr>
        <tr>
            <td><font color="#993300">Restrictions.allEq</font></td>
            <td><font color="#993300">使用Map，使用key/value进行多个等于的比对</font></td>
        </tr>
        <tr>
            <td><font color="#993300">Restrictions.gt</font></td>
            <td><font color="#993300">大于 &gt;</font></td>
        </tr>
        <tr>
            <td><font color="#993300">Restrictions.ge</font></td>
            <td><font color="#993300">大于等于 &gt;=</font></td>
        </tr>
        <tr>
            <td><font color="#993300">Restrictions.lt</font></td>
            <td><font color="#993300">小于 &lt;</font></td>
        </tr>
        <tr>
            <td><font color="#993300">Restrictions.le</font></td>
            <td><font color="#993300">小于等于 &lt;=</font></td>
        </tr>
        <tr>
            <td><font color="#993300">Restrictions.between</font></td>
            <td><font color="#993300">对应SQL的BETWEEN子句</font></td>
        </tr>
        <tr>
            <td><font color="#993300">Restrictions.like</font></td>
            <td><font color="#993300">对应SQL的LIKE子句</font></td>
        </tr>
        <tr>
            <td><font color="#993300">Restrictions.in</font></td>
            <td><font color="#993300">对应SQL的in子句</font></td>
        </tr>
        <tr>
            <td><font color="#993300">Restrictions.and</font></td>
            <td><font color="#993300">and关系</font></td>
        </tr>
        <tr>
            <td><font color="#993300">Restrictions.or</font></td>
            <td><font color="#993300">or关系</font></td>
        </tr>
        <tr>
            <td><font color="#993300">Restrictions.sqlRestriction</font></td>
            <td><font color="#993300">SQL限定查询</font></td>
        </tr>
    </tbody>
</table>
<!--
--><!--
Root decorator: all decisions about how a page is to be decorated via the
inline decoration begins here.
--><!--
Switch based upon the context. However, for now, just delegate to a decorator
identified directly by the context.
-->
<p>此外，Criteria还可以进行复合查询。即在原有的查询基础上再进行查询，例如在Room对User的一对多关系中，在查询出所有的Room資料之后，希望再查询users中"age"为30的user資料：</p>
<div>
<ol>
    <li>Criteria&nbsp;roomCriteria&nbsp;=&nbsp;session.createCriteria(Room.class);</li>
    <li>Criteria&nbsp;userCriteria&nbsp;=&nbsp;roomCriteria.createCriteria("users");</li>
    <li>userCriteria.add(Restrictions.eq("age",&nbsp;new&nbsp;Integer(30)));</li>
    <li>List&nbsp;rooms&nbsp;=&nbsp;roomCriteria.list();&nbsp;//&nbsp;只列出users属性中有user之"age"为30的Room </li>
    <li>Iterator&nbsp;iterator&nbsp;=&nbsp;rooms.iterator();</li>
</ol>
</div>
<p>这个涉及到对象的关联映射，在后续章节中还会着重讲述。</p>
<img src ="http://www.blogjava.net/super2/aggbug/237446.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/super2/" target="_blank">淘声依旧</a> 2008-10-29 19:31 <a href="http://www.blogjava.net/super2/archive/2008/10/29/237446.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hibernate3学习笔记(六)｜Session管理</title><link>http://www.blogjava.net/super2/archive/2008/10/29/237445.html</link><dc:creator>淘声依旧</dc:creator><author>淘声依旧</author><pubDate>Wed, 29 Oct 2008 11:30:00 GMT</pubDate><guid>http://www.blogjava.net/super2/archive/2008/10/29/237445.html</guid><wfw:comment>http://www.blogjava.net/super2/comments/237445.html</wfw:comment><comments>http://www.blogjava.net/super2/archive/2008/10/29/237445.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/super2/comments/commentRss/237445.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/super2/services/trackbacks/237445.html</trackback:ping><description><![CDATA[请注意，在hibernate中SessionFactory是被设计成线程安全(Thread-safe)的,遗憾的是，Session却线程不安全。
<p>这就意味着:有可能多个线程共享并操作同一个Session从而很容易使数据混乱。</p>
<p>解决的办法如下：（其实hibernate的文档中早已经提过了）</p>
<p>新建HibernateUtil类：</p>
<div>
<ol>
    <li>import&nbsp;org.apache.commons.logging.Log;</li>
    <li>import&nbsp;org.apache.commons.logging.LogFactory;</li>
    <li>import&nbsp;org.hibernate.*;</li>
    <li>import&nbsp;org.hibernate.cfg.*;</li>
    <li><br />
    </li>
    <li>public&nbsp;class&nbsp;HibernateUtil&nbsp;{</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;static&nbsp;Log&nbsp;log&nbsp;=&nbsp;LogFactory.getLog(HibernateUtil.class);</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;static&nbsp;final&nbsp;SessionFactory&nbsp;sessionFactory;</li>
    <li><br />
    </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;static&nbsp;{</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try&nbsp;{</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Create&nbsp;the&nbsp;SessionFactory </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sessionFactory&nbsp;=&nbsp;new&nbsp;Configuration().configure()</li>
    <li>&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;.buildSessionFactory();</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;catch&nbsp;(Throwable&nbsp;ex)&nbsp;{</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Make&nbsp;sure&nbsp;you&nbsp;log&nbsp;the&nbsp;exception,&nbsp;as&nbsp;it&nbsp;might&nbsp;be&nbsp;swallowed </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;log.error("Initial&nbsp;SessionFactory&nbsp;creation&nbsp;failed.",&nbsp;ex);</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;throw&nbsp;new&nbsp;ExceptionInInitializerError(ex);</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;}</li>
    <li><br />
    </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;final&nbsp;ThreadLocal&nbsp;session&nbsp;=&nbsp;new&nbsp;ThreadLocal();</li>
    <li><br />
    </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;Session&nbsp;currentSession()&nbsp;{</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Session&nbsp;s&nbsp;=&nbsp;(Session)&nbsp;session.get();</li>
    <li><br />
    </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Open&nbsp;a&nbsp;new&nbsp;Session,&nbsp;if&nbsp;this&nbsp;Thread&nbsp;has&nbsp;none&nbsp;yet </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(s&nbsp;==&nbsp;null)&nbsp;{</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s&nbsp;=&nbsp;sessionFactory.openSession();</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session.set(s);</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
    <li><br />
    </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;s;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;}</li>
    <li><br />
    </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;void&nbsp;closeSession()&nbsp;{</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Session&nbsp;s&nbsp;=&nbsp;(Session)&nbsp;session.get();</li>
    <li><br />
    </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(s&nbsp;!=&nbsp;null)&nbsp;{</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s.close();</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
    <li><br />
    </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session.set(null);</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;}</li>
    <li>}</li>
</ol>
</div>
<p>这样，在程序中可这样调用：</p>
<div>
<ol>
    <li>Session&nbsp;session&nbsp;=&nbsp;HibernateUtil.currentSession();</li>
    <li>User&nbsp;user&nbsp;=&nbsp;(User)&nbsp;session.load(User.class,&nbsp;new&nbsp;Integer(1));</li>
    <li>System.out.println(user.getName());</li>
    <li>HibernateUtil.closeSession();</li>
</ol>
</div>
<p>在web应用中，可以借由Filter来进行session管理。在需要session的时候开启session，在request结束之后关闭session。</p>
<p><strong>HibernateSessionUtil.java</strong></p>
<div>
<ol>
    <li>import&nbsp;java.io.Serializable;</li>
    <li><br />
    </li>
    <li>import&nbsp;net.sf.hibernate.HibernateException;</li>
    <li>import&nbsp;net.sf.hibernate.Session;</li>
    <li>import&nbsp;net.sf.hibernate.SessionFactory;</li>
    <li>import&nbsp;net.sf.hibernate.Transaction;</li>
    <li><br />
    </li>
    <li>public&nbsp;class&nbsp;HibernateSessionUtil&nbsp;implements&nbsp;Serializable</li>
    <li>{</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;final&nbsp;ThreadLocal&nbsp;tLocalsess&nbsp;=&nbsp;new&nbsp;ThreadLocal();</li>
    <li><br />
    </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;final&nbsp;ThreadLocal&nbsp;tLocaltx&nbsp;=&nbsp;new&nbsp;ThreadLocal();</li>
    <li><br />
    </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;/*</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;getting&nbsp;the&nbsp;thread-safe&nbsp;session&nbsp;for&nbsp;using</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;Session&nbsp;currentSession(){</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Session&nbsp;session&nbsp;=&nbsp;(Session)&nbsp;tLocalsess.get();</li>
    <li><br />
    </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//open&nbsp;a&nbsp;new&nbsp;one,&nbsp;if&nbsp;none&nbsp;can&nbsp;be&nbsp;found. </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try{</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(session&nbsp;==&nbsp;null){</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session&nbsp;=&nbsp;openSession();</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tLocalsess.set(session);</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}catch&nbsp;(HibernateException&nbsp;e){</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;throw&nbsp;new&nbsp;InfrastructureException(e);</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;session;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;}</li>
    <li><br />
    </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;/*</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;closing&nbsp;the&nbsp;thread-safe&nbsp;session</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;void&nbsp;closeSession(){</li>
    <li><br />
    </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Session&nbsp;session&nbsp;=&nbsp;(Session)&nbsp;tLocalsess.get();</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tLocalsess.set(null);</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try{</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(session&nbsp;!=&nbsp;null&nbsp;&amp;&amp;&nbsp;session.isOpen()){</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session.close();</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
    <li><br />
    </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}catch&nbsp;(HibernateException&nbsp;e){</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;throw&nbsp;new&nbsp;InfrastructureException(e);</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;}</li>
    <li><br />
    </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;/*</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;begin&nbsp;the&nbsp;transaction</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;void&nbsp;beginTransaction(){</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Transaction&nbsp;tx&nbsp;=&nbsp;(Transaction)&nbsp;tLocaltx.get();</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try{</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(tx&nbsp;==&nbsp;null){</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tx&nbsp;=&nbsp;currentSession().beginTransaction();</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tLocaltx.set(tx);</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}catch&nbsp;(HibernateException&nbsp;e){</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;throw&nbsp;new&nbsp;InfrastructureException(e);</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;}</li>
    <li><br />
    </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;/*</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;close&nbsp;the&nbsp;transaction</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;void&nbsp;commitTransaction(){</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Transaction&nbsp;tx&nbsp;=&nbsp;(Transaction)&nbsp;tLocaltx.get();</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try{</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(tx&nbsp;!=&nbsp;null&nbsp;&amp;&amp;&nbsp;!tx.wasCommitted()&nbsp;&amp;&amp;&nbsp;!tx.wasRolledBack())</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tx.commit();</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tLocaltx.set(null);</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}catch&nbsp;(HibernateException&nbsp;e){</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;throw&nbsp;new&nbsp;InfrastructureException(e);</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;}</li>
    <li><br />
    </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;/*</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;for&nbsp;rollbacking</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;void&nbsp;rollbackTransaction(){</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Transaction&nbsp;tx&nbsp;=&nbsp;(Transaction)&nbsp;tLocaltx.get();</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try{</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tLocaltx.set(null);</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(tx&nbsp;!=&nbsp;null&nbsp;&amp;&amp;&nbsp;!tx.wasCommitted()&nbsp;&amp;&amp;&nbsp;!tx.wasRolledBack()){</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tx.rollback();</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}catch&nbsp;(HibernateException&nbsp;e){</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;throw&nbsp;new&nbsp;InfrastructureException(e);</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;}</li>
    <li><br />
    </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;static&nbsp;Session&nbsp;openSession()&nbsp;throws&nbsp;HibernateException{</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;getSessionFactory().openSession();</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;}</li>
    <li><br />
    </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;static&nbsp;SessionFactory&nbsp;getSessionFactory()&nbsp;throws&nbsp;HibernateException{</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;SingletonSessionFactory.getInstance();</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;}</li>
    <li>}</li>
</ol>
</div>
<p>filter中则：</p>
<div>
<ol>
    <li>public&nbsp;class&nbsp;HibernateSessionCloser&nbsp;implements&nbsp;Filter{</li>
    <li><br />
    </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;protected&nbsp;FilterConfig&nbsp;filterConfig&nbsp;=&nbsp;null;</li>
    <li><br />
    </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;init(FilterConfig&nbsp;filterConfig)throws&nbsp;ServletException{</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;this.filterConfig&nbsp;=&nbsp;filterConfig;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;}</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;destroy(){</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.filterConfig&nbsp;=&nbsp;null;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li><br />
    </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;doFilter(ServletRequest&nbsp;request,&nbsp;ServletResponse&nbsp;response,</li>
    <li>&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;FilterChain&nbsp;chain)</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;throws&nbsp;IOException,&nbsp;ServletException&nbsp;{</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try{</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;chain.doFilter(request,&nbsp;response);</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;finally{</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try{</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HibernateSessionUtil.commitTransaction();</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}catch&nbsp;(InfrastructureException&nbsp;e){</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HibernateSessionUtil.rollbackTransaction();</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}finally{</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HibernateSessionUtil.closeSession();</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
    <li><br />
    </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;}</li>
    <li>}</li>
</ol>
</div>
<p>然后在操作数据库前加上</p>
<p>HibernateSessionUtil.beginTransaction();<br />
HibernateSessionUtil.currentSession();//取得Session</p>
<img src ="http://www.blogjava.net/super2/aggbug/237445.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/super2/" target="_blank">淘声依旧</a> 2008-10-29 19:30 <a href="http://www.blogjava.net/super2/archive/2008/10/29/237445.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hibernate3学习笔记(五)｜saveOrUpdate方法</title><link>http://www.blogjava.net/super2/archive/2008/10/29/237444.html</link><dc:creator>淘声依旧</dc:creator><author>淘声依旧</author><pubDate>Wed, 29 Oct 2008 11:29:00 GMT</pubDate><guid>http://www.blogjava.net/super2/archive/2008/10/29/237444.html</guid><wfw:comment>http://www.blogjava.net/super2/comments/237444.html</wfw:comment><comments>http://www.blogjava.net/super2/archive/2008/10/29/237444.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/super2/comments/commentRss/237444.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/super2/services/trackbacks/237444.html</trackback:ping><description><![CDATA[<p>修改User.hbm.xml文件如下：</p>
<div>
<ol>
    <li>&lt;?xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"?&gt;</li>
    <li><br />
    </li>
    <li>&lt;!DOCTYPE&nbsp;hibernate-mapping&nbsp;PUBLIC</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;"-//Hibernate/Hibernate&nbsp;Mapping&nbsp;DTD&nbsp;3.0//EN"&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"&gt;</li>
    <li><br />
    </li>
    <li>&lt;hibernate-mapping&gt;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&lt;class&nbsp;name="com.hb3.pack_01.model.User"&nbsp;table="user"&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dynamic-insert="true"&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dynamic-update="true"&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&gt;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;id&nbsp;name="id"&nbsp;column="id"&nbsp;type="java.lang.Integer"&nbsp;<strong>unsaved-value="null"&gt;</strong></li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;generator&nbsp;class="native"&nbsp;/&gt;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/id&gt;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;property&nbsp;name="name"&nbsp;column="name"&nbsp;type="java.lang.String"&nbsp;/&gt;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;property&nbsp;name="age"&nbsp;column="age"&nbsp;type="java.lang.Integer"&nbsp;/&gt;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&lt;/class&gt;</li>
    <li>&lt;/hibernate-mapping&gt;</li>
</ol>
</div>
<p>测试代码：</p>
<div>
<ol>
    <li>package&nbsp;com.hb3.pack_01;</li>
    <li><br />
    </li>
    <li>import&nbsp;java.util.Iterator;</li>
    <li>import&nbsp;java.util.List;</li>
    <li><br />
    </li>
    <li>import&nbsp;org.hibernate.Criteria;</li>
    <li>import&nbsp;org.hibernate.Query;</li>
    <li>import&nbsp;org.hibernate.Session;</li>
    <li>import&nbsp;org.hibernate.SessionFactory;</li>
    <li>import&nbsp;org.hibernate.Transaction;</li>
    <li>import&nbsp;org.hibernate.cfg.Configuration;</li>
    <li><br />
    </li>
    <li>import&nbsp;com.hb3.pack_01.model.User;</li>
    <li><br />
    </li>
    <li>public&nbsp;class&nbsp;BusinessService&nbsp;{</li>
    <li><br />
    </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;void&nbsp;main(String[]&nbsp;args)&nbsp;{</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Configuration&nbsp;config&nbsp;=&nbsp;new&nbsp;Configuration().configure();</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SessionFactory&nbsp;sessionFactory&nbsp;=&nbsp;config.buildSessionFactory();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Session&nbsp;session&nbsp;=&nbsp;sessionFactory.openSession();</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Criteria&nbsp;criteria&nbsp;=&nbsp;session.createCriteria(User.class);</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List&lt;?&gt;&nbsp;users&nbsp;=&nbsp;criteria.list();</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Iterator&lt;?&gt;&nbsp;iterator&nbsp;=&nbsp;users.iterator();</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("id&nbsp;"t&nbsp;name/age");</li>
    <li><br />
    </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(iterator.hasNext())&nbsp;{</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;User&nbsp;user&nbsp;=&nbsp;(User)&nbsp;iterator.next();</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(user.getId()&nbsp;+&nbsp;"&nbsp;"t&nbsp;"&nbsp;+&nbsp;user.getName()&nbsp;+&nbsp;"/"&nbsp;+&nbsp;user.getAge());</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session.close();</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("========================================");</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session&nbsp;=&nbsp;sessionFactory.openSession();</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;User&nbsp;user&nbsp;=&nbsp;new&nbsp;User();</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;user.setId(2);</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;user.setName("chenyan");</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;user.setAge(new&nbsp;Integer(24));</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Transaction&nbsp;tx&nbsp;=&nbsp;session.beginTransaction();</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session.saveOrUpdate(user);</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tx.commit();</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("========================================");</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;user&nbsp;=&nbsp;new&nbsp;User();</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;user.setName("yangye");</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;user.setAge(new&nbsp;Integer(23));</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tx&nbsp;=&nbsp;session.beginTransaction();</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session.saveOrUpdate(user);</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tx.commit();</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("========================================");</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Query&nbsp;query&nbsp;=&nbsp;session.createQuery("from&nbsp;User");</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;users&nbsp;=&nbsp;query.list();</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iterator&nbsp;=&nbsp;users.iterator();</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("id&nbsp;"t&nbsp;name/age");</li>
    <li><br />
    </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(iterator.hasNext())&nbsp;{</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;user&nbsp;=&nbsp;(User)&nbsp;iterator.next();</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(user.getId()&nbsp;+&nbsp;"&nbsp;"t&nbsp;"&nbsp;+&nbsp;user.getName()&nbsp;+&nbsp;"/"&nbsp;+&nbsp;user.getAge());</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session.close();</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sessionFactory.close();</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;}</li>
    <li>}</li>
</ol>
</div>
<p>运行结果：</p>
<p>13:45:00,140&nbsp; WARN ConfigurationFactory:127 - No configuration
found. Configuring ehcache from ehcache-failsafe.xml&nbsp; found in the
classpath:
jar:file:/D:/Java/MyEclipse%206.0/workspace/hb3demo/ehcache-1.2.3.jar!/ehcache-failsafe.xml<br />
13:45:00,703&nbsp;
WARN EhCacheProvider:93 - Could not find configuration
[org.hibernate.cache.UpdateTimestampsCache]; using defaults.<br />
13:45:00,734&nbsp; WARN EhCacheProvider:93 - Could not find configuration [org.hibernate.cache.StandardQueryCache]; using defaults.<br />
Hibernate: select this_.id as id0_0_, this_.name as name0_0_, this_.age as age0_0_ from user this_<br />
id &nbsp; name/age<br />
1 &nbsp; shenbin/28<br />
2 &nbsp; chenyan/25<br />
========================================<br />
Hibernate: update user set name=?, age=? where id=?<br />
========================================<br />
Hibernate: insert into user (name, age) values (?, ?)<br />
========================================<br />
Hibernate: select user0_.id as id0_, user0_.name as name0_, user0_.age as age0_ from user user0_<br />
id &nbsp; name/age<br />
1 &nbsp; shenbin/28<br />
2 &nbsp; chenyan/24<br />
3&nbsp;&nbsp; yangye/23</p>
<p>提示：</p>
<p><strong>unsaved-value可以设定的值包括： </strong></p>
<p><strong>any：总是存储</strong></p>
<p><strong>none：总是更新 </strong></p>
<p><strong>null：id为null时存储（默认） </strong></p>
<p><strong>valid：id为null或是指定值时存储</strong></p>
<p>值得一提的是：</p>
<p>正如上面的代码所示，使用查询语句查出对象后，不能使用同一个session直接对对象进行修改操作。否则会抛出异常：</p>
<p><font color="#ff0000">Exception in thread "main"
org.hibernate.NonUniqueObjectException: a different object with the
same identifier value was already associated with the session:
[com.hb3.pack_01.model.User#2]</font></p>
<p><font color="#ff0000">......</font></p>
<p><font color="#000000">当然这并不是saveOrUpdate方法独有的。save和update等方法使用不当也会出现如上异常。</font></p>
<p><font color="#000000">解决方法可新建session, 或参阅：</font></p>
<p><font color="#000000"><a href="../../Unmi/archive/2007/08/10/135771.html">http://www.blogjava.net/Unmi/archive/2007/08/10/135771.html</a></font></p>
<p><a href="http://blog.csdn.net/tmpfree/archive/2006/03/13/623516.aspx">http://blog.csdn.net/tmpfree/archive/2006/03/13/623516.aspx</a></p>
<p><a href="http://www.javaeye.com/topic/11581">http://www.javaeye.com/topic/11581</a></p>
<img src ="http://www.blogjava.net/super2/aggbug/237444.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/super2/" target="_blank">淘声依旧</a> 2008-10-29 19:29 <a href="http://www.blogjava.net/super2/archive/2008/10/29/237444.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hibernate3学习笔记(四)｜增删改查 </title><link>http://www.blogjava.net/super2/archive/2008/10/29/237443.html</link><dc:creator>淘声依旧</dc:creator><author>淘声依旧</author><pubDate>Wed, 29 Oct 2008 11:28:00 GMT</pubDate><guid>http://www.blogjava.net/super2/archive/2008/10/29/237443.html</guid><wfw:comment>http://www.blogjava.net/super2/comments/237443.html</wfw:comment><comments>http://www.blogjava.net/super2/archive/2008/10/29/237443.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/super2/comments/commentRss/237443.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/super2/services/trackbacks/237443.html</trackback:ping><description><![CDATA[<p>测试代码：</p>
<div>
<ol>
    <li>package&nbsp;com.hb3.pack_01;</li>
    <li><br />
    </li>
    <li>import&nbsp;org.hibernate.Session;</li>
    <li>import&nbsp;org.hibernate.SessionFactory;</li>
    <li>import&nbsp;org.hibernate.Transaction;</li>
    <li>import&nbsp;org.hibernate.cfg.Configuration;</li>
    <li><br />
    </li>
    <li>import&nbsp;com.hb3.pack_01.model.User;</li>
    <li><br />
    </li>
    <li>public&nbsp;class&nbsp;BusinessService&nbsp;{</li>
    <li><br />
    </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;void&nbsp;main(String[]&nbsp;args)&nbsp;{</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Configuration&nbsp;config&nbsp;=&nbsp;new&nbsp;Configuration().configure();</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SessionFactory&nbsp;sessionFactory&nbsp;=&nbsp;config.buildSessionFactory();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Session&nbsp;session&nbsp;=&nbsp;sessionFactory.openSession();</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//insert </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;User&nbsp;user&nbsp;=&nbsp;new&nbsp;User();</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;user.setName("chenyan");</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//user.setAge(new&nbsp;Integer(23));</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Transaction&nbsp;tx&nbsp;=&nbsp;session.beginTransaction();</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session.save(user);</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tx.commit();</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//get </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;user&nbsp;=&nbsp;(User)&nbsp;session.get(User.class,&nbsp;user.getId());</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(user.getAge());</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//update </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;user.setAge(new&nbsp;Integer(24));</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tx=&nbsp;session.beginTransaction();&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session.update(user);</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tx.commit();</li>
    <li><br />
    </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//load </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;user&nbsp;=&nbsp;(User)&nbsp;session.load(User.class,&nbsp;user.getId());</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(user.getAge());</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//delete </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tx = session.beginTransaction();<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; session.delete(user);<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tx.commit();</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session.close();</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sessionFactory.close();</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;}</li>
    <li>}</li>
</ol>
</div>
<p>执行结果：</p>
<p>11:50:50,750&nbsp; WARN ConfigurationFactory:127 - No configuration
found. Configuring ehcache from ehcache-failsafe.xml&nbsp; found in the
classpath:
jar:file:/D:/Java/MyEclipse%206.0/workspace/hb3demo/ehcache-1.2.3.jar!/ehcache-failsafe.xml<br />
11:50:51,156&nbsp;
WARN EhCacheProvider:93 - Could not find configuration
[org.hibernate.cache.UpdateTimestampsCache]; using defaults.<br />
11:50:51,171&nbsp; WARN EhCacheProvider:93 - Could not find configuration [org.hibernate.cache.StandardQueryCache]; using defaults.<br />
Hibernate: insert into user (name, age) values (?, ?)<br />
null<br />
Hibernate: update user set name=?, age=? where id=?<br />
24</p>
<p>修改User.hbm.xml文件如下：</p>
<div>
<ol>
    <li>&lt;?xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"?&gt;</li>
    <li><br />
    </li>
    <li>&lt;!DOCTYPE&nbsp;hibernate-mapping&nbsp;PUBLIC</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;"-//Hibernate/Hibernate&nbsp;Mapping&nbsp;DTD&nbsp;3.0//EN"&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"&gt;</li>
    <li><br />
    </li>
    <li>&lt;hibernate-mapping&gt;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&lt;class&nbsp;name="com.hb3.pack_01.model.User"&nbsp;table="user"&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong>dynamic-insert="true"</strong>&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong>dynamic-update="true"</strong>&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&gt;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;id&nbsp;name="id"&nbsp;column="id"&nbsp;type="java.lang.Integer"&gt;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;generator&nbsp;class="native"&nbsp;/&gt;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/id&gt;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;property&nbsp;name="name"&nbsp;column="name"&nbsp;type="java.lang.String"&nbsp;/&gt;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;property&nbsp;name="age"&nbsp;column="age"&nbsp;type="java.lang.Integer"&nbsp;/&gt;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&lt;/class&gt;</li>
    <li>&lt;/hibernate-mapping&gt;</li>
</ol>
</div>
<p>运行结果如下：</p>
<p>12:46:32,062&nbsp; WARN ConfigurationFactory:127 - No configuration
found. Configuring ehcache from ehcache-failsafe.xml&nbsp; found in the
classpath:
jar:file:/D:/Java/MyEclipse%206.0/workspace/hb3demo/ehcache-1.2.3.jar!/ehcache-failsafe.xml<br />
12:46:32,468&nbsp;
WARN EhCacheProvider:93 - Could not find configuration
[org.hibernate.cache.UpdateTimestampsCache]; using defaults.<br />
12:46:32,500&nbsp; WARN EhCacheProvider:93 - Could not find configuration [org.hibernate.cache.StandardQueryCache]; using defaults.<br />
Hibernate: insert into user (name) values (?)<br />
null<br />
Hibernate: update user set age=? where id=?<br />
24<br />
Hibernate: delete from user where id=?</p>
<p>可见：</p>
<p><strong>dynamic-insert和dynamic-update设成true后，分别表示生成的SQL中只插入非空字段以及只修改改变过的字段。</strong></p>
<p>另外,hibernate还提供了saveOrUpdate()方法，因为这个方法很容易出错，故在后续章节着重讲述。</p>
<p>关于查询：</p>
<div>
<ol>
    <li>package&nbsp;com.hb3.pack_01;</li>
    <li><br />
    </li>
    <li>import&nbsp;java.util.Iterator;</li>
    <li>import&nbsp;java.util.List;</li>
    <li><br />
    </li>
    <li>import&nbsp;org.hibernate.Criteria;</li>
    <li>import&nbsp;org.hibernate.Query;</li>
    <li>import&nbsp;org.hibernate.Session;</li>
    <li>import&nbsp;org.hibernate.SessionFactory;</li>
    <li>import&nbsp;org.hibernate.cfg.Configuration;</li>
    <li>import&nbsp;org.hibernate.criterion.Restrictions;</li>
    <li><br />
    </li>
    <li>import&nbsp;com.hb3.pack_01.model.User;</li>
    <li><br />
    </li>
    <li>public&nbsp;class&nbsp;BusinessService&nbsp;{</li>
    <li><br />
    </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;void&nbsp;main(String[]&nbsp;args)&nbsp;{</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Configuration&nbsp;config&nbsp;=&nbsp;new&nbsp;Configuration().configure();</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SessionFactory&nbsp;sessionFactory&nbsp;=&nbsp;config.buildSessionFactory();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Session&nbsp;session&nbsp;=&nbsp;sessionFactory.openSession();</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Criteria&nbsp;criteria&nbsp;=&nbsp;session.createCriteria(User.class);</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List&lt;?&gt;&nbsp;users&nbsp;=&nbsp;criteria.list();</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Iterator&lt;?&gt;&nbsp;iterator&nbsp;=&nbsp;users.iterator();</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("id&nbsp;"t&nbsp;name/age");</li>
    <li><br />
    </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(iterator.hasNext())&nbsp;{</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;User&nbsp;user&nbsp;=&nbsp;(User)&nbsp;iterator.next();</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(user.getId()&nbsp;+&nbsp;"&nbsp;"t&nbsp;"&nbsp;+&nbsp;user.getName()&nbsp;+&nbsp;"/"&nbsp;+&nbsp;user.getAge());</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//criteria.add(Expression.eq("name",&nbsp;"shenbin")); </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;criteria.add(Restrictions.eq("name",&nbsp;"shenbin"));</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;users&nbsp;=&nbsp;criteria.list();</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iterator&nbsp;=&nbsp;users.iterator();</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("id&nbsp;"t&nbsp;name/age");</li>
    <li><br />
    </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(iterator.hasNext())&nbsp;{</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;User&nbsp;user&nbsp;=&nbsp;(User)&nbsp;iterator.next();</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(user.getId()&nbsp;+&nbsp;"&nbsp;"t&nbsp;"&nbsp;+&nbsp;user.getName()&nbsp;+&nbsp;"/"&nbsp;+&nbsp;user.getAge());</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("====================================================");</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Query&nbsp;query&nbsp;=&nbsp;session.createQuery("from&nbsp;User");</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;users&nbsp;=&nbsp;query.list();</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iterator&nbsp;=&nbsp;users.iterator();</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("id&nbsp;"t&nbsp;name/age");</li>
    <li><br />
    </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(iterator.hasNext())&nbsp;{</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;User&nbsp;user&nbsp;=&nbsp;(User)&nbsp;iterator.next();</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(user.getId()&nbsp;+&nbsp;"&nbsp;"t&nbsp;"&nbsp;+&nbsp;user.getName()&nbsp;+&nbsp;"/"&nbsp;+&nbsp;user.getAge());</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;query&nbsp;=&nbsp;session.createQuery("from&nbsp;User&nbsp;user&nbsp;where&nbsp;user.name&nbsp;like&nbsp;?");</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;query.setParameter(0,&nbsp;"shenbin");</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;users&nbsp;=&nbsp;query.list();</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iterator&nbsp;=&nbsp;users.iterator();</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("id&nbsp;"t&nbsp;name/age");</li>
    <li><br />
    </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(iterator.hasNext())&nbsp;{</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;User&nbsp;user&nbsp;=&nbsp;(User)&nbsp;iterator.next();</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(user.getId()&nbsp;+&nbsp;"&nbsp;"t&nbsp;"&nbsp;+&nbsp;user.getName()&nbsp;+&nbsp;"/"&nbsp;+&nbsp;user.getAge());</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
    <li><br />
    </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session.close();</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sessionFactory.close();</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;}</li>
    <li>}</li>
</ol>
</div>
<p>执行结果：</p>
<p>13:05:43,031&nbsp; WARN ConfigurationFactory:127 - No configuration
found. Configuring ehcache from ehcache-failsafe.xml&nbsp; found in the
classpath:
jar:file:/D:/Java/MyEclipse%206.0/workspace/hb3demo/ehcache-1.2.3.jar!/ehcache-failsafe.xml<br />
13:05:43,453&nbsp;
WARN EhCacheProvider:93 - Could not find configuration
[org.hibernate.cache.UpdateTimestampsCache]; using defaults.<br />
13:05:43,484&nbsp; WARN EhCacheProvider:93 - Could not find configuration [org.hibernate.cache.StandardQueryCache]; using defaults.<br />
Hibernate: select this_.id as id0_0_, this_.name as name0_0_, this_.age as age0_0_ from user this_<br />
id &nbsp; name/age<br />
1 &nbsp; shenbin/29<br />
2 &nbsp; chenyan/24<br />
3 &nbsp; chenyan/24<br />
4 &nbsp; chenyan/24<br />
Hibernate: select this_.id as id0_0_, this_.name as name0_0_, this_.age as age0_0_ from user this_ where this_.name=?<br />
id &nbsp; name/age<br />
1 &nbsp; shenbin/29<br />
================================================<br />
Hibernate: select user0_.id as id0_, user0_.name as name0_, user0_.age as age0_ from user user0_<br />
id &nbsp; name/age<br />
1 &nbsp; shenbin/29<br />
2 &nbsp; chenyan/24<br />
3 &nbsp; chenyan/24<br />
4 &nbsp; chenyan/24<br />
Hibernate: select user0_.id as id0_, user0_.name as name0_, user0_.age as age0_ from user user0_ where user0_.name like ?<br />
id &nbsp; name/age<br />
1 &nbsp; shenbin/29</p>
<p>以上分别演示了使用Criteria对SQL的分装以及透过HQL来进行查询。</p>
<p>注意：</p>
<p>代码中如下部分</p>
<p>//criteria.add(Expression.eq("name", "shenbin"));<br />
criteria.add(Restrictions.eq("name", "shenbin"));</p>
<p>在hibernate3.3以后的版本，可能Expression类会被废除，为了保证代码的向后兼容，请使用Restrictions替代。</p>
<img src ="http://www.blogjava.net/super2/aggbug/237443.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/super2/" target="_blank">淘声依旧</a> 2008-10-29 19:28 <a href="http://www.blogjava.net/super2/archive/2008/10/29/237443.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hibernate3学习笔记(三)｜数据加载——Session.get/load </title><link>http://www.blogjava.net/super2/archive/2008/10/29/237442.html</link><dc:creator>淘声依旧</dc:creator><author>淘声依旧</author><pubDate>Wed, 29 Oct 2008 11:27:00 GMT</pubDate><guid>http://www.blogjava.net/super2/archive/2008/10/29/237442.html</guid><wfw:comment>http://www.blogjava.net/super2/comments/237442.html</wfw:comment><comments>http://www.blogjava.net/super2/archive/2008/10/29/237442.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/super2/comments/commentRss/237442.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/super2/services/trackbacks/237442.html</trackback:ping><description><![CDATA[Session.load/get方法均可以根据指定的实体类和id从数据库读取记录，并返回与之对应的实体对象。其区别在于：
<ol>
    <li>如果未能发现符合条件的记录，get方法返回null，而load方法会抛出一个ObjectNotFoundException。
    </li>
    <li>Load方法可返回实体的代理类实例，而get方法永远直接返回实体类。
    </li>
    <li>load方法可以充分利用内部缓存和二级缓存中的现有数据，而get方法则仅仅在内部缓存中进行数据查找，如没有发现对应数据，将越过二级缓存，直接调用SQL完成数据读取。 </li>
</ol>
<p>Session在加载实体对象时，将经过的过程：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;首先，Hibernate中维持了两级缓存。第一级缓存由Session实例维护，其中保持了Session当前所有关联实体的数
据，也称为内部缓存。而第二级缓存则存在于SessionFactory层次，由当前所有由本SessionFactory构造的Session实例共
享。出于性能考虑，避免无谓的数据库访问，Session在调用数据库查询功能之前，会先在缓存中进行查询。首先在第一级缓存中，通过实体类型和id进行
查找，如果第一级缓存查找命中，且数据状态合法，则直接返回。
之后，Session会在当前&#8220;NonExists&#8221;记录中进行查找，如果&#8220;NonExists&#8221;记录中存在同样的查询条件，则返回null。
&#8220;NonExists&#8221;记录了当前Session实例在之前所有查询操作中，未能查询到有效数据的查询条件（相当于一个查询黑名单列表）。如此一来，如果
Session中一个无效的查询条件重复出现，即可迅速作出判断，从而获得最佳的性能表现。 </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;对于load方法而言，如果内部缓存中未发现有效数据，则查询第二级缓存，如果第二级缓存命中，则返回。
如在缓存中未发现有效数据，则发起数据库查询操作（Select
SQL），如经过查询未发现对应记录，则将此次查询的信息在&#8220;NonExists&#8221;中加以记录，并返回null。 根据映射配置和Select
SQL得到的ResultSet，创建对应的数据对象。 将其数据对象纳入当前Session实体管理容器（一级缓存）。
执行Interceptor.onLoad方法（如果有对应的Interceptor）。 将数据对象纳入二级缓存。
如果数据对象实现了LifeCycle接口，则调用数据对象的onLoad方法。 返回数据对象。 </p>
<p>另外值得注意的是：（接前面的例子）</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; User user1 = (User) session.get(User.class, new Integer(1));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; User user2 = (User) session.load(User.class, new Integer(1));</p>
<p>和</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;User user2 = (User) session.load(User.class, new Integer(1));</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;User user1 = (User) session.get(User.class, new Integer(1));<br />
仅仅执行的顺序不同，但取数据使用的机制是不同的。</p>
<p>如下图所示：</p>
<p><img alt="" src="file:///C:/h1.JPG" width="1024" height="742" /></p>
<p><img alt="" src="file:///C:/h2.JPG" width="1024" height="742" /></p>
<p>很明显，在执行session.get之前从来没有执行过session.load，则session.get直接返回实体而不使用ｐｒｏｘｙ。在这之后若使用session.load也将直接返回实体。</p>
<p>但是如果由session.load先执行，则一定不会直接返回对象实体的。因为他优先考虑从缓存中返回数据。</p>
<img src ="http://www.blogjava.net/super2/aggbug/237442.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/super2/" target="_blank">淘声依旧</a> 2008-10-29 19:27 <a href="http://www.blogjava.net/super2/archive/2008/10/29/237442.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hibernate3学习笔记(二)｜一级缓存</title><link>http://www.blogjava.net/super2/archive/2008/10/29/237441.html</link><dc:creator>淘声依旧</dc:creator><author>淘声依旧</author><pubDate>Wed, 29 Oct 2008 11:25:00 GMT</pubDate><guid>http://www.blogjava.net/super2/archive/2008/10/29/237441.html</guid><wfw:comment>http://www.blogjava.net/super2/comments/237441.html</wfw:comment><comments>http://www.blogjava.net/super2/archive/2008/10/29/237441.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/super2/comments/commentRss/237441.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/super2/services/trackbacks/237441.html</trackback:ping><description><![CDATA[<p>修改BusinessService．ｊａｖａ文件如下所示：</p>
<div>
<ol>
    <li>package&nbsp;com.hb3.pack_01;</li>
    <li><br />
    </li>
    <li>import&nbsp;org.hibernate.Session;</li>
    <li>import&nbsp;org.hibernate.SessionFactory;</li>
    <li>import&nbsp;org.hibernate.cfg.Configuration;</li>
    <li><br />
    </li>
    <li>import&nbsp;com.hb3.pack_01.model.User;</li>
    <li><br />
    </li>
    <li>public&nbsp;class&nbsp;BusinessService&nbsp;{</li>
    <li><br />
    </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;void&nbsp;main(String[]&nbsp;args)&nbsp;{</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Configuration&nbsp;config&nbsp;=&nbsp;new&nbsp;Configuration().configure();</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SessionFactory&nbsp;sessionFactory&nbsp;=&nbsp;config.buildSessionFactory();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Session&nbsp;session&nbsp;=&nbsp;sessionFactory.openSession();</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;User&nbsp;user1&nbsp;=&nbsp;(User)&nbsp;session.load(User.class,&nbsp;new&nbsp;Integer(1));</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;User&nbsp;user2&nbsp;=&nbsp;(User)&nbsp;session.load(User.class,&nbsp;new&nbsp;Integer(1));</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(user1&nbsp;==&nbsp;user2);</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;user1&nbsp;=&nbsp;(User)&nbsp;session.load(User.class,&nbsp;new&nbsp;Integer(1));</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session.evict(user1);</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;user2&nbsp;=&nbsp;(User)&nbsp;session.load(User.class,&nbsp;new&nbsp;Integer(1));</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(user1&nbsp;==&nbsp;user2);</li>
    <li><br />
    </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;user1&nbsp;=&nbsp;(User)&nbsp;session.load(User.class,&nbsp;new&nbsp;Integer(1));</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session.clear();</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;user2&nbsp;=&nbsp;(User)&nbsp;session.load(User.class,&nbsp;new&nbsp;Integer(1));</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(user1&nbsp;==&nbsp;user2);</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Session&nbsp;session1&nbsp;=&nbsp;sessionFactory.openSession();&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;user1&nbsp;=&nbsp;(User)&nbsp;session1.load(User.class,&nbsp;new&nbsp;Integer(1));&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session1.close();&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Session&nbsp;session2&nbsp;=&nbsp;sessionFactory.openSession();&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;user2&nbsp;=&nbsp;(User)session2.load(User.class,&nbsp;new&nbsp;Integer(1));&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session2.close();</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(user1&nbsp;==&nbsp;user2);</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session.close();</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sessionFactory.close();</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;}</li>
    <li>}</li>
</ol>
</div>
<p>依次打印出的结果为</p>
<p>true<br />
false<br />
false<br />
false</p>
<p>可见：</p>
<p>使用session.evict或者session.clear把某个物体从缓存中移除，或者直接关闭Session，都会使缓存失效，或者说释放缓存占用的资源空间。</p>
<p>值得一提的是：在载入大量数据时，应该及时手动清除一级缓存以释放资源。</p>
<p>例如：</p>
<div>
<ol>
    <li>Session&nbsp;session&nbsp;=&nbsp;sessionFactory.openSession();</li>
    <li>Transaction&nbsp;tx&nbsp;=&nbsp;session.beginTransaction();</li>
    <li><br />
    </li>
    <li>while(....)&nbsp;{&nbsp;//&nbsp;大量載入物件時的迴圈示意 </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;....</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;session.save(someObject);</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;if(count&nbsp;%&nbsp;100&nbsp;==&nbsp;0)&nbsp;{&nbsp;//&nbsp;每100筆資料 </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session.flush();&nbsp;//&nbsp;送入資料庫 </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session.clear();&nbsp;//&nbsp;清除快取 </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;}</li>
    <li>}</li>
    <li><br />
    </li>
    <li>tx.commit();</li>
    <li>session.close();</li>
</ol>
</div>
<p><font color="#000000">在SQL Server、Oracle等数据库可使用ｈｉｂｅｒｎａｔｅ的配置文件进行配置，如：</font></p>
<span><font color="#000000">
<div>
<ol>
    <li>....</li>
    <li>&lt;hibernate-configuration&gt;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&lt;session-factory&gt;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;....</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;property&nbsp;name="hibernate.jdbc.batch_size"&gt;100&lt;/property&gt;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;....</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&lt;/session-factory&gt;</li>
    <li>&lt;hibernate-configuration&gt;</li>
</ol>
</div>
</font></span>
<p><font color="#000000">注意：在MySQL中不支持这种配置方式。</font></p>
<img src ="http://www.blogjava.net/super2/aggbug/237441.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/super2/" target="_blank">淘声依旧</a> 2008-10-29 19:25 <a href="http://www.blogjava.net/super2/archive/2008/10/29/237441.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hibernate3学习笔记(一)</title><link>http://www.blogjava.net/super2/archive/2008/10/29/237440.html</link><dc:creator>淘声依旧</dc:creator><author>淘声依旧</author><pubDate>Wed, 29 Oct 2008 11:24:00 GMT</pubDate><guid>http://www.blogjava.net/super2/archive/2008/10/29/237440.html</guid><wfw:comment>http://www.blogjava.net/super2/comments/237440.html</wfw:comment><comments>http://www.blogjava.net/super2/archive/2008/10/29/237440.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/super2/comments/commentRss/237440.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/super2/services/trackbacks/237440.html</trackback:ping><description><![CDATA[下载最新hibernate的资源：<a href="http://www.hibernate.org/6.html">http://www.hibernate.org/6.html</a>&nbsp; 本文使用最新的 3.3.0 SP1 版本
<p>所需jar包列表如下：</p>
<p>antlr-2.7.6.jar<br />
commons-collections-3.1.jar<br />
commons-logging-1.1.jar<br />
dom4j-1.6.1.jar<br />
ehcache-1.2.3.jar<br />
ejb3-persistence.jar<br />
hibernate3.jar<br />
hibernate-annotations.jar<br />
hibernate-commons-annotations.jar<br />
hibernate-validator.jar<br />
javassist-3.4.GA.jar<br />
jta-1.1.jar<br />
log4j.jar<br />
mysql-connector-java-5.1.6-bin.jar<br />
slf4j-api-1.4.2.jar<br />
slf4j-log4j12.jar</p>
<p>hibernate.cfg.xml配置文件：</p>
<div>
<ol>
    <li>&lt;?xml&nbsp;version='1.0'&nbsp;encoding='UTF-8'?&gt;</li>
    <li>&lt;!DOCTYPE&nbsp;hibernate-configuration&nbsp;PUBLIC</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;"-//Hibernate/Hibernate&nbsp;Configuration&nbsp;DTD&nbsp;3.0//EN"</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"&gt;</li>
    <li><br />
    </li>
    <li>&lt;hibernate-configuration&gt;</li>
    <li><br />
    </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&lt;session-factory&gt;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;property&nbsp;name="hibernate.connection.driver_class"&gt;com.mysql.jdbc.Driver&lt;/property&gt;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;property&nbsp;name="hibernate.connection.url"&gt;jdbc:mysql://localhost:3306/hb3demo&lt;/property&gt;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;property&nbsp;name="hibernate.dialect"&gt;org.hibernate.dialect.MySQL5Dialect&lt;/property&gt;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;property&nbsp;name="connection.username"&gt;root&lt;/property&gt;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;property&nbsp;name="connection.password"&gt;root&lt;/property&gt;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;property&nbsp;name="jdbc.fetch_size"&gt;50&lt;/property&gt;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;property&nbsp;name="jdbc.batch_size"&gt;30&lt;/property&gt;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;property&nbsp;name="show_sql"&gt;true&lt;/property&gt;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;property&nbsp;name="use_outer_join"&gt;true&lt;/property&gt;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;property&nbsp;name="transaction.factory_class"&gt;org.hibernate.transaction.JDBCTransactionFactory&lt;/property&gt;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;property&nbsp;name="hibernate.cache.provider_class"&gt;org.hibernate.cache.EhCacheProvider&lt;/property&gt;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;property&nbsp;name="hibernate.cache.use_query_cache"&gt;true&lt;/property&gt;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;mapping&nbsp;resource="com/hb3/pack_01/model/User.hbm.xml"&nbsp;/&gt;</li>
    <li><br />
    </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&lt;/session-factory&gt;</li>
    <li><br />
    </li>
    <li>&lt;/hibernate-configuration&gt;</li>
</ol>
</div>
<p>log4j.properties</p>
<div>
<ol>
    <li>log4j.rootLogger=warn,&nbsp;stdout</li>
    <li><br />
    </li>
    <li>log4j.appender.stdout=org.apache.log4j.ConsoleAppender</li>
    <li>log4j.appender.stdout.Target=System.out</li>
    <li>log4j.appender.stdout.layout=org.apache.log4j.PatternLayout</li>
    <li>log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE}&nbsp;%5p&nbsp;%c{1}:%L&nbsp;-&nbsp;%m%n</li>
</ol>
</div>
<p><font color="#000000">User.java</font></p>
<div>
<ol>
    <li>package&nbsp;com.hb3.pack_01.model;</li>
    <li><br />
    </li>
    <li>public&nbsp;class&nbsp;User&nbsp;{</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;Integer&nbsp;id;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;String&nbsp;name;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;Integer&nbsp;age;</li>
    <li><br />
    </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;Integer&nbsp;getId()&nbsp;{</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;id;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;}</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;setId(Integer&nbsp;id)&nbsp;{</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.id&nbsp;=&nbsp;id;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;}</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;String&nbsp;getName()&nbsp;{</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;name;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;}</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;setName(String&nbsp;name)&nbsp;{</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.name&nbsp;=&nbsp;name;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;}</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;Integer&nbsp;getAge()&nbsp;{</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;age;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;}</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;setAge(Integer&nbsp;age)&nbsp;{</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.age&nbsp;=&nbsp;age;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;}</li>
    <li>}</li>
</ol>
</div>
<p>User.hbm.xml</p>
<div>
<ol>
    <li>&lt;?xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"?&gt;</li>
    <li><br />
    </li>
    <li>&lt;!DOCTYPE&nbsp;hibernate-mapping&nbsp;PUBLIC</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;"-//Hibernate/Hibernate&nbsp;Mapping&nbsp;DTD&nbsp;3.0//EN"&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"&gt;</li>
    <li><br />
    </li>
    <li>&lt;hibernate-mapping&gt;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&lt;class&nbsp;name="com.hb3.pack_01.model.User"&nbsp;table="user"&gt;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;id&nbsp;name="id"&nbsp;column="id"&nbsp;type="java.lang.Integer"&gt;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;generator&nbsp;class="native"&nbsp;/&gt;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/id&gt;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;property&nbsp;name="name"&nbsp;column="name"&nbsp;type="java.lang.String"&nbsp;/&gt;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;property&nbsp;name="age"&nbsp;column="age"&nbsp;type="java.lang.Integer"&nbsp;/&gt;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&lt;/class&gt;</li>
    <li>&lt;/hibernate-mapping&gt;</li>
</ol>
</div>
<p><font style="background-color: #f8f8f8;" color="#000000">BusinessService.java</font></p>
<div>
<ol>
    <li>package&nbsp;com.hb3.pack_01;</li>
    <li><br />
    </li>
    <li>import&nbsp;org.hibernate.Session;</li>
    <li>import&nbsp;org.hibernate.SessionFactory;</li>
    <li>import&nbsp;org.hibernate.Transaction;</li>
    <li>import&nbsp;org.hibernate.cfg.Configuration;</li>
    <li><br />
    </li>
    <li>import&nbsp;com.hb3.pack_01.model.User;</li>
    <li><br />
    </li>
    <li>public&nbsp;class&nbsp;BusinessService&nbsp;{</li>
    <li><br />
    </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;void&nbsp;main(String[]&nbsp;args)&nbsp;{</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Configuration&nbsp;config&nbsp;=&nbsp;new&nbsp;Configuration().configure();</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SessionFactory&nbsp;sessionFactory&nbsp;=&nbsp;config.buildSessionFactory();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Session&nbsp;session&nbsp;=&nbsp;sessionFactory.openSession();</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;User&nbsp;user&nbsp;=&nbsp;new&nbsp;User();</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;user.setName("shenbin");</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;user.setAge(new&nbsp;Integer(28));&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Transaction&nbsp;tx&nbsp;=&nbsp;session.beginTransaction();&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session.save(user);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tx.commit();</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session.close();</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sessionFactory.close();</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;}</li>
    <li>}</li>
</ol>
</div>
<p>在MySQL数据库中新建数据库hb3demo，并执行如下DDL</p>
<div>
<ol>
    <li>CREATE&nbsp;TABLE&nbsp;user&nbsp;(</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;id&nbsp;INT(11)&nbsp;NOT&nbsp;NULL&nbsp;auto_increment&nbsp;PRIMARY&nbsp;KEY,</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;name&nbsp;VARCHAR(100)&nbsp;NOT&nbsp;NULL&nbsp;default&nbsp;'',</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;age&nbsp;INT</li>
    <li>);</li>
</ol>
</div>
<p>这样就可以使用ｈｉｂｅｒｎａｔｅ向数据库插入数据了。</p>
<img src ="http://www.blogjava.net/super2/aggbug/237440.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/super2/" target="_blank">淘声依旧</a> 2008-10-29 19:24 <a href="http://www.blogjava.net/super2/archive/2008/10/29/237440.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>