﻿<?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-happy everyday-随笔分类-hibernate/ibatis</title><link>http://www.blogjava.net/smallfa/category/35754.html</link><description>上进、向上、乐观、健康、相信一切皆有可能</description><language>zh-cn</language><lastBuildDate>Sat, 30 Oct 2010 22:05:33 GMT</lastBuildDate><pubDate>Sat, 30 Oct 2010 22:05:33 GMT</pubDate><ttl>60</ttl><item><title>hibernate-HQL语句</title><link>http://www.blogjava.net/smallfa/archive/2010/08/21/329534.html</link><dc:creator>smallfa</dc:creator><author>smallfa</author><pubDate>Sat, 21 Aug 2010 05:43:00 GMT</pubDate><guid>http://www.blogjava.net/smallfa/archive/2010/08/21/329534.html</guid><wfw:comment>http://www.blogjava.net/smallfa/comments/329534.html</wfw:comment><comments>http://www.blogjava.net/smallfa/archive/2010/08/21/329534.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/smallfa/comments/commentRss/329534.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/smallfa/services/trackbacks/329534.html</trackback:ping><description><![CDATA[<h1 class="Article_tle">hibernate-HQL语句(1)</h1>
http://java.chinaitlab.com/Hibernate/809957.html<br />
<br />
<img src ="http://www.blogjava.net/smallfa/aggbug/329534.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/smallfa/" target="_blank">smallfa</a> 2010-08-21 13:43 <a href="http://www.blogjava.net/smallfa/archive/2010/08/21/329534.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hibernate中对象的3种状态----瞬时态、持久态、脱管态 </title><link>http://www.blogjava.net/smallfa/archive/2008/11/15/240739.html</link><dc:creator>smallfa</dc:creator><author>smallfa</author><pubDate>Sat, 15 Nov 2008 14:22:00 GMT</pubDate><guid>http://www.blogjava.net/smallfa/archive/2008/11/15/240739.html</guid><wfw:comment>http://www.blogjava.net/smallfa/comments/240739.html</wfw:comment><comments>http://www.blogjava.net/smallfa/archive/2008/11/15/240739.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/smallfa/comments/commentRss/240739.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/smallfa/services/trackbacks/240739.html</trackback:ping><description><![CDATA[Hibernate的对象有3种状态，分别为：瞬时态(Transient)、&nbsp;持久态(Persistent)、脱管态(Detached)。处于持久态的对象也称为PO(Persistence Object)，瞬时对象和脱管对象也称为VO（Value Object）。
<ul>
    <li><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 瞬时态</strong></li>
</ul>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 由new命令开辟内存空间的java对象，</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; eg. Person person = new Person("amigo", "女");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如果没有变量对该对象进行引用，它将被java虚拟机回收。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;瞬时对象在内存孤立存在，它是携带信息的载体，不和数据库的数据有任何关联关系，在Hibernate中，可通过session的save()或saveOrUpdate()方法将瞬时对象与数据库相关联，并将数据对应的插入数据库中，此时该瞬时对象转变成持久化对象。</p>
<ul>
    <li><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 持久态</strong></li>
</ul>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 处于该状态的对象在数据库中具有对应的记录，并拥有一个持久化标识。如果是用hibernate的delete()方法，对应的持久对象就变成瞬时对象，因数据库中的对应数据已被删除，该对象不再与数据库的记录关联。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 当一个session执行close()或clear()、evict()之后，持久对象变成脱管对象，此时持久对象会变成脱管对象，此时该对象虽然具有数据库识别值，但它已不在HIbernate持久层的管理之下。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 持久对象具有如下特点：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1. 和session实例关联；</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2. 在数据库中有与之关联的记录。</p>
<ul>
    <li><strong>&nbsp;脱管态</strong></li>
</ul>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 当与某持久对象关联的session被关闭后，该持久对象转变为脱管对象。当脱管对象被重新关联到session上时，并再次转变成持久对象。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 脱管对象拥有数据库的识别值，可通过update()、saveOrUpdate()等方法，转变成持久对象。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 脱管对象具有如下特点：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.&nbsp; 本质上与瞬时对象相同，在没有任何变量引用它时，JVM会在适当的时候将它回收；</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2.&nbsp;&nbsp;比瞬时对象多了一个数据库记录标识值。</p>
<img src ="http://www.blogjava.net/smallfa/aggbug/240739.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/smallfa/" target="_blank">smallfa</a> 2008-11-15 22:22 <a href="http://www.blogjava.net/smallfa/archive/2008/11/15/240739.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Hibernate的核心接口学习 </title><link>http://www.blogjava.net/smallfa/archive/2008/11/15/240734.html</link><dc:creator>smallfa</dc:creator><author>smallfa</author><pubDate>Sat, 15 Nov 2008 14:14:00 GMT</pubDate><guid>http://www.blogjava.net/smallfa/archive/2008/11/15/240734.html</guid><wfw:comment>http://www.blogjava.net/smallfa/comments/240734.html</wfw:comment><comments>http://www.blogjava.net/smallfa/archive/2008/11/15/240734.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/smallfa/comments/commentRss/240734.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/smallfa/services/trackbacks/240734.html</trackback:ping><description><![CDATA[本文摘自孙卫琴的《精通Hibernate：Java对象持久化技术详情》<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Hibernate有如下5个核心接口：
<ul>
    <li><strong>Configuration接口</strong>：该对象用于配置并且根启动Hibernate。Hibernate应用通过Configuration实例来指定对象-关系映射文件的位置或动态配置Hibernate的属性，然后创建SessionFactory实例。
    <li><strong>SessionFactory接口</strong>：一个SessionFactory实例对应一个数据存储源，应用从SessionFactory中获得Session实例。它具有如下特点：</li>
</ul>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1）它是线程安全的，这意味着它的同一个实例可以被应用的各个线程共享。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2）它是重量级的，这意味着不能随意创建或销毁它的实例。如果应用只访问一个数据库，只需创建一个SessionFactory实例，在应用初始化的时候创建该实例。如果应用同时访问多个数据库，则需要为每个数据库创建一个单独的SessionFactory实例。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;之所以说SessionFactory是重量级的，是因为它需要一个很大的缓存，用来存放预定义的SQL语句以及映射元数据等。用户还可以为SessionFactory配置一个缓存插件，这个缓存插件被称为Hibernate的第二级缓存，该缓存用来存放被工作单元读过的数据，将来其它工作单元可能会重用这些数据，因此这个缓存中的数据能够被所有工作单元共享，一个工作单元通常对应一个数据库事务。</p>
<ul>
    <li><strong>Session接口：</strong>该接口是Hibernate应用使用最广泛的接口。Session也被称为持久化管理器，提供了和持久化相关的操作，如添加、更新、删除、加载和查询对象。Session具有一下特点：</li>
</ul>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1）不是线程安全的，因此在设计软件架构时，应该避免多个线程共享同一个Session实例；</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2）Session实例是轻量级的，所谓轻量级，是指它的创建和销毁不需要消耗太多的资源。这意味着在程序中可以经常创建和销毁Session对象，例如为每个客户请求分配单独的Session实例，或者为每个工作单元分配单独的Session实例。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Session有一个缓存，被称为Hibernate的第一级缓存，它存放被当前工作单元加载的对象。每个Session实例都有自己的缓存，这个Session实例的缓存，这个Session实例的缓存只能被当前工作单元访问。</p>
<ul>
    <li>&nbsp;<strong>Transaction：</strong>该接口是Hibernate的数据库事务接口，它对底层的事务接口做了封装，底层事务接口包括：JDBC API、JTA（Java Transaction API）、CORBA（Common Object Requet Broker Architecture) API.</li>
</ul>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Hibernate应用可通过一致的Transaction接口来声明事务边界，这有助于应用在不同环境或容器中移植。</p>
<ul>
    <li>&nbsp;<strong>Query和Criteria接口：</strong>它们是Hibernate的查询接口，用于向数据库查询对象，以及控制执行查询的过程。Query实例封装了一个HQL（Hibernate Query Language）查询语句，HQL是面向对象的，它引用类名及类的属性名，而不是表名及表的字段名。Criteria接口完全封装了基于字符串形式的查询语句，比Query接口更加面向对象，Criteria接口更擅长于执行动态查询。</li>
</ul>
<img src ="http://www.blogjava.net/smallfa/aggbug/240734.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/smallfa/" target="_blank">smallfa</a> 2008-11-15 22:14 <a href="http://www.blogjava.net/smallfa/archive/2008/11/15/240734.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hibernat配置文件中set元素中各属性的定义 </title><link>http://www.blogjava.net/smallfa/archive/2008/11/15/240733.html</link><dc:creator>smallfa</dc:creator><author>smallfa</author><pubDate>Sat, 15 Nov 2008 14:09:00 GMT</pubDate><guid>http://www.blogjava.net/smallfa/archive/2008/11/15/240733.html</guid><wfw:comment>http://www.blogjava.net/smallfa/comments/240733.html</wfw:comment><comments>http://www.blogjava.net/smallfa/archive/2008/11/15/240733.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/smallfa/comments/commentRss/240733.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/smallfa/services/trackbacks/240733.html</trackback:ping><description><![CDATA[&lt;set &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; name="propertyName" &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; (1) &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; table="table_name" &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; (2) &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; schema="schema_name" &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; (3) &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; lazy="true|false" &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; (4) &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; inverse="true|false" &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; (5) &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cascade="all|none|save-update|delete|all-delete-orphan" &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; (6) &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sort="unsorted|natural|comparatorClass" &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; (7) &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; order-by="column_name &nbsp; asc|desc" &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; (8) &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; where="arbitrary &nbsp; sql &nbsp; where &nbsp; condition" &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; (9) &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; outer-join="true|false|auto" &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; (10) &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; batch-size="N" &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; (11) &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; access="field|property|ClassName" &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; (12) &nbsp; <br />
&nbsp; &gt; &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;key &nbsp; .... &nbsp; /&gt; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;index &nbsp; .... &nbsp; /&gt; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;element &nbsp; .... &nbsp; /&gt; &nbsp; <br />
&nbsp; &lt;/set&gt;&nbsp;&nbsp;&nbsp;<br />
&nbsp; (1) &nbsp; name &nbsp; 集合属性的名称&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp; (2) &nbsp; table &nbsp; （可选——默认为属性的名称）这个集合表的名称(不能在一对多的关联关系中使用)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp; (3) &nbsp; schema &nbsp; (可选) &nbsp; 表的schema的名称, &nbsp; 他将覆盖在根元素中定义的schema&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp; (4) &nbsp; lazy &nbsp; (可选——默认为false) &nbsp; lazy(可选--默认为false) &nbsp; 允许延迟加载（lazy &nbsp; initialization &nbsp; ）(不能在数组中使用)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp; (5) &nbsp; inverse &nbsp; (可选——默认为false) &nbsp; 标记这个集合作为双向关联关系中的方向一端。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp; (6) &nbsp; cascade &nbsp; (可选——默认为none) &nbsp; 让操作级联到子实体&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp; (7) &nbsp; sort(可选)指定集合的排序顺序, &nbsp; 其可以为自然的(natural)或者给定一个用来比较的类。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp; (8) &nbsp; order-by &nbsp; (可选, &nbsp; 仅用于jdk1.4) &nbsp; 指定表的字段(一个或几个)再加上asc或者desc(可选), &nbsp; 定义Map,Set和Bag的迭代顺序&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp; (9) &nbsp; where &nbsp; (可选) &nbsp; 指定任意的SQL &nbsp; where条件, &nbsp; 该条件将在重新载入或者删除这个集合时使用(当集合中的数据仅仅是所有可用数据的一个子集时这个条件非常有用)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp; (10) &nbsp; outer-join(可选)指定这个集合,只要可能,应该通过外连接(outer &nbsp; join)取得。在每一个SQL语句中, &nbsp; 只能有一个集合可以被通过外连接抓取(译者注: &nbsp; 这里提到的SQL语句是取得集合所属类的数据的Select语句)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp; (11) &nbsp; batch-size &nbsp; (可选, &nbsp; 默认为1) &nbsp; 指定通过延迟加载取得集合实例的批处理块大小（"batch &nbsp; size"）。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp; (12) &nbsp; access(可选-默认为属性property):Hibernate取得属性值时使用的策略 
<img src ="http://www.blogjava.net/smallfa/aggbug/240733.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/smallfa/" target="_blank">smallfa</a> 2008-11-15 22:09 <a href="http://www.blogjava.net/smallfa/archive/2008/11/15/240733.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Hibernate3.x调用存储过程 </title><link>http://www.blogjava.net/smallfa/archive/2008/11/15/240732.html</link><dc:creator>smallfa</dc:creator><author>smallfa</author><pubDate>Sat, 15 Nov 2008 14:08:00 GMT</pubDate><guid>http://www.blogjava.net/smallfa/archive/2008/11/15/240732.html</guid><wfw:comment>http://www.blogjava.net/smallfa/comments/240732.html</wfw:comment><comments>http://www.blogjava.net/smallfa/archive/2008/11/15/240732.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/smallfa/comments/commentRss/240732.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/smallfa/services/trackbacks/240732.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 原文出处：http://tech.it168.com/j/d/2007-05-14/200705141007843.shtml说明：该文不得转载摘要：本文以详尽的实例展示了hibernate3.x中调用存储过程各步骤，从建立测试表、存储过程的建立、工程的建立以及类的编写和测试一步一步引导用户学习hibernate3.x中调用存储过程的方法.如果底层数据库（eg. Oracle、mysq...&nbsp;&nbsp;<a href='http://www.blogjava.net/smallfa/archive/2008/11/15/240732.html'>阅读全文</a><img src ="http://www.blogjava.net/smallfa/aggbug/240732.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/smallfa/" target="_blank">smallfa</a> 2008-11-15 22:08 <a href="http://www.blogjava.net/smallfa/archive/2008/11/15/240732.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【Ｈibernate总结系列】hibernate.cfg.xml配置 </title><link>http://www.blogjava.net/smallfa/archive/2008/11/15/240730.html</link><dc:creator>smallfa</dc:creator><author>smallfa</author><pubDate>Sat, 15 Nov 2008 14:03:00 GMT</pubDate><guid>http://www.blogjava.net/smallfa/archive/2008/11/15/240730.html</guid><wfw:comment>http://www.blogjava.net/smallfa/comments/240730.html</wfw:comment><comments>http://www.blogjava.net/smallfa/archive/2008/11/15/240730.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/smallfa/comments/commentRss/240730.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/smallfa/services/trackbacks/240730.html</trackback:ping><description><![CDATA[&nbsp;
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Hibernate<span style="font-family: 宋体">的描述文件可以是一个</span>properties<span style="font-family: 宋体">属性文件，也可以是一个</span>xml<span style="font-family: 宋体">文件。下面讲一下</span>Hibernate.cfg.xml<span style="font-family: 宋体">的配置。配置格式如下：<br />
</span><strong><span style="font-size: 12pt; line-height: 156%">1</span><span style="font-size: 12pt; line-height: 156%">. </span><span style="font-size: 12pt; line-height: 156%; font-family: 黑体">配置数据源</span></strong></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">在</span>Hibernate.cfg.xml<span style="font-family: 宋体">中既可以配置</span>JDBC<span style="font-family: 宋体">，也可以配置</span>JNDI<span style="font-family: 宋体">。在本小节中讲述数据源如何配置。</span></p>
<p><strong><span style="color: red">hibernate.cfg.xml</span></strong></p>
<p><span style="font-size: 9pt">&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />
&lt;!DOCTYPE&nbsp;hibernate-configuration&nbsp;PUBLIC<br />
"-//Hibernate/Hibernate&nbsp;Configuration&nbsp;DTD&nbsp;3.0//EN"<br />
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"&gt;</span></p>
<p><span style="font-size: 9pt">&lt;hibernate-configuration&gt;</span></p>
<p style="text-indent: 13.5pt"><span style="font-size: 9pt">&lt;session-factory&gt;</span></p>
<p style="text-indent: 18pt"><span style="font-size: 9pt">&lt;!-- </span><span style="font-size: 9pt; font-family: 宋体">各属性的配置</span><span style="font-size: 9pt">--&gt;</span></p>
<p style="text-indent: 18pt"><span style="font-size: 9pt">&lt;!—</span><span style="font-size: 9pt; font-family: 宋体">为</span><span style="font-size: 9pt">true</span><span style="font-size: 9pt; font-family: 宋体">表示将</span><span style="font-size: 9pt">Hibernate</span><span style="font-size: 9pt; font-family: 宋体">发送给数据库的</span><span style="font-size: 9pt">sql</span><span style="font-size: 9pt; font-family: 宋体">显示出来</span><span style="font-size: 9pt"> --&gt;</span></p>
<p style="text-indent: 18pt"><span style="font-size: 9pt">&lt;property name="show_sql"&gt;true&lt;/property&gt;</span></p>
<p style="text-indent: 18pt"><span style="font-size: 9pt">&lt;!-- SQL</span><span style="font-size: 9pt; font-family: 宋体">方言，这边设定的是</span><span style="font-size: 9pt">MySQL --&gt;</span></p>
<p style="text-indent: 18pt"><span style="font-size: 9pt">&lt;property name="dialect"&gt;net.sf.hibernate.dialect.MySQLDialect&lt;/property&gt;</span></p>
<p style="text-indent: 18pt"><span style="font-size: 9pt">&lt;!-- </span><span style="font-size: 9pt; font-family: 宋体">一次读的数据库记录数</span><span style="font-size: 9pt"> --&gt;</span></p>
<p style="text-indent: 18pt"><span style="font-size: 9pt">&lt;property name="jdbc.fetch_size"&gt;50&lt;/property&gt;</span></p>
<p style="text-indent: 18pt"><span style="font-size: 9pt">&lt;!-- </span><span style="font-size: 9pt; font-family: 宋体">设定对数据库进行批量删除</span><span style="font-size: 9pt"> --&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="jdbc.batch_size"&gt;30&lt;/property&gt;</span></p>
<p style="text-indent: 18pt"><span style="font-size: 9pt">&lt;!—</span><span style="font-size: 9pt; font-family: 宋体">下面为</span><span style="font-size: 9pt">JNDI</span><span style="font-size: 9pt; font-family: 宋体">的配置</span><span style="font-size: 9pt"> --&gt;</span></p>
<p style="text-indent: 18pt"><span style="font-size: 9pt">&lt;!-- </span><span style="font-size: 9pt; font-family: 宋体">数据源的名称</span><span style="font-size: 9pt"> --&gt;</span></p>
<p style="text-indent: 21pt"><span style="font-size: 9pt">&lt;property name="connection.datasource"&gt;java:comp/env/jdbc/datasourcename&lt;/property&gt;</span></p>
<p style="text-indent: 21pt"><span style="font-size: 9pt">&lt;!-- </span><span style="font-size: 9pt; color: black; font-family: Arial">Hibernate</span><span style="font-size: 9pt; color: black; font-family: 宋体">的连接加载类</span><span style="font-size: 9pt"> --&gt;</span></p>
<p style="text-indent: 21pt"><span style="font-size: 9pt">&lt;property name="connection.provider_class"&gt;net.sf.hibernate.connection.DatasourceConnectionProvider&lt;/property&gt;</span></p>
<p style="text-indent: 21pt"><span style="font-size: 9pt">&lt;property name="dialect"&gt;net.sf.hibernate.dialect.SQLServerDialect&lt;/property&gt;</span></p>
<p style="text-indent: 21pt"><span style="font-size: 9pt">&lt;!—</span><span style="font-size: 9pt; font-family: 宋体">映射文件</span><span style="font-size: 9pt"> --&gt;</span></p>
<p style="text-indent: 21pt"><span style="font-size: 9pt">&lt;mapping resource="com/amigo/pojo/User.hbm.xml"/&gt;</span></p>
<p style="text-indent: 21pt"><span style="font-size: 9pt">&lt;mapping resource="com/amigo/pojo/Org.hbm.xml"/&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/session-factory&gt;<br />
&lt;/hibernate-configuration&gt;</span></p>
<h4><span style="font-size: 12pt; line-height: 156%">2. c3p0</span><span style="font-size: 12pt; line-height: 156%; font-family: 黑体">连接池</span></h4>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; c3p0<span style="font-family: 宋体">连接池是</span>Hibernate<span style="font-family: 宋体">推荐使用的连接池，若需要使用该连接池时，需要将</span>c3p0<span style="font-family: 宋体">的</span>jar<span style="font-family: 宋体">包加入到</span>classpath<span style="font-family: 宋体">中。</span>c3p0<span style="font-family: 宋体">连接池的配置示例如下：</span></p>
<p><strong><span style="color: red">hibernate.cfg.xml</span></strong></p>
<p><span style="font-size: 9pt">&lt;?xml version="1.0" encoding="UTF-8"?&gt;</span></p>
<p><span style="font-size: 9pt">&lt;!DOCTYPE&nbsp;hibernate-configuration&nbsp;PUBLIC</span></p>
<p><span style="font-size: 9pt">"-//Hibernate/Hibernate&nbsp;Configuration&nbsp;DTD&nbsp;3.0//EN"</span></p>
<p><span style="font-size: 9pt">"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"&gt;</span></p>
<p><span style="font-size: 9pt">&lt;hibernate-configuration&gt;</span></p>
<p style="text-indent: 18pt"><span style="font-size: 9pt">&lt;session-factory&gt;</span></p>
<p style="text-indent: 18pt"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- </span><span style="font-size: 9pt; font-family: 宋体">显示实际操作数据库时的</span><span style="font-size: 9pt">SQL --&gt;</span></p>
<p style="text-indent: 18pt"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="show_sql"&gt;true&lt;/property&gt;</span></p>
<p style="text-indent: 18pt"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- SQL</span><span style="font-size: 9pt; font-family: 宋体">方言，这边设定的是</span><span style="font-size: 9pt">MySQL --&gt;</span></p>
<p style="text-indent: 18pt"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="dialect"&gt;net.sf.hibernate.dialect.MySQLDialect&lt;/property&gt;</span></p>
<p style="text-indent: 18pt"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--</span><span style="font-size: 9pt; font-family: 宋体">驱动程序，在后续的章节中将讲述</span><span style="font-size: 9pt">mysql</span><span style="font-size: 9pt; font-family: 宋体">、</span><span style="font-size: 9pt">sqlserver</span><span style="font-size: 9pt; font-family: 宋体">和</span><span style="font-size: 9pt">Oracle</span><span style="font-size: 9pt; font-family: 宋体">数据库的配置</span><span style="font-size: 9pt"> --&gt;</span></p>
<p style="text-indent: 18pt"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="connection.driver_class"&gt;&#8230;&#8230;&lt;/property&gt;</span></p>
<p style="text-indent: 18pt"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- JDBC URL --&gt;</span></p>
<p style="text-indent: 18pt"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="connection.url"&gt;&#8230;&#8230;&lt;/property&gt;</span></p>
<p style="text-indent: 18pt"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- </span><span style="font-size: 9pt; font-family: 宋体">数据库用户名</span><span style="font-size: 9pt"> --&gt;</span></p>
<p style="text-indent: 18pt"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="connection.username"&gt;user&lt;/property&gt;</span></p>
<p style="text-indent: 18pt"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- </span><span style="font-size: 9pt; font-family: 宋体">数据库密码</span><span style="font-size: 9pt"> --&gt;</span></p>
<p style="text-indent: 18pt"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="connection.password"&gt;pass&lt;/property&gt;</span></p>
<p style="text-indent: 18pt"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="c3p0.min_size"&gt;5&lt;/property&gt;</span></p>
<p style="text-indent: 18pt"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="c3p0.max_size"&gt;20&lt;/property&gt;</span></p>
<p style="text-indent: 18pt"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="c3p0.timeout"&gt;1800&lt;/property&gt;</span></p>
<p style="text-indent: 18pt"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="c3p0.max_statements"&gt;50&lt;/property&gt;</span></p>
<p style="text-indent: 18pt"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- </span><span style="font-size: 9pt; font-family: 宋体">对象与数据库表格映像文件</span><span style="font-size: 9pt"> --&gt;</span></p>
<p style="text-indent: 21pt"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;mapping resource="com/amigo/pojo/User.hbm.xml"/&gt;</span></p>
<p style="margin-left: 21pt; text-indent: 18pt"><span style="font-size: 9pt">&lt;mapping resource="com/amigo/pojo/Org.hbm.xml"/&gt;</span></p>
<p style="text-indent: 18pt"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp; &lt;/session-factory&gt;</span></p>
<p style="text-indent: 18pt"><span style="font-size: 9pt">&lt;/hibernate-configuration&gt;</span></p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">在上述配置中，</span>Hibernate<span style="font-family: 宋体">根据配置文件生成连接，再交给</span>c3p0<span style="font-family: 宋体">管理。</span></p>
<h4><span style="font-size: 12pt; line-height: 156%">3. proxool</span><span style="font-size: 12pt; line-height: 156%; font-family: 黑体">连接池</span></h4>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; proxool<span style="font-family: 宋体">跟</span>c3p0<span style="font-family: 宋体">以及</span>dbcp<span style="font-family: 宋体">不一样，它是自己生成连接的，因此连接信息放在</span>proxool<span style="font-family: 宋体">配置文件中。使用它时，需要将</span>proxool-0.8.3.jar<span style="font-family: 宋体">加入到</span>classespath<span style="font-family: 宋体">中。</span><span style="font-size: 9pt; font-family: 宋体">配置举例如下：</span></p>
<p><strong><span style="color: red">hibernate.cfg.xml</span></strong></p>
<p><span style="font-size: 9pt">&lt;?xml version="1.0" encoding="UTF-8"?&gt;</span></p>
<p><span style="font-size: 9pt">&lt;!DOCTYPE&nbsp;hibernate-configuration&nbsp;PUBLIC</span></p>
<p><span style="font-size: 9pt">"-//Hibernate/Hibernate&nbsp;Configuration&nbsp;DTD&nbsp;3.0//EN"</span></p>
<p><span style="font-size: 9pt">"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"&gt;</span></p>
<p><span style="font-size: 9pt">&lt;hibernate-configuration&gt;</span></p>
<p style="text-indent: 18pt"><span style="font-size: 9pt">&lt;session-factory&gt;</span></p>
<p style="text-indent: 18pt"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- </span><span style="font-size: 9pt; font-family: 宋体">显示实际操作数据库时的</span><span style="font-size: 9pt">SQL --&gt;</span></p>
<p style="text-indent: 18pt"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="show_sql"&gt;true&lt;/property&gt;</span></p>
<p style="text-indent: 18pt"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- SQL</span><span style="font-size: 9pt; font-family: 宋体">方言，这边设定的是</span><span style="font-size: 9pt">MySQL --&gt;</span></p>
<p style="text-indent: 18pt"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="dialect"&gt;net.sf.hibernate.dialect.MySQLDialect&lt;/property&gt;</span></p>
<p style="text-indent: 18pt"><span style="font-size: 9pt">&lt;!—proxool</span><span style="font-size: 9pt; font-family: 宋体">的配置</span><span style="font-size: 9pt"> --&gt;</span></p>
<p style="text-indent: 18pt"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;property&nbsp;name="proxool.pool_alias"&gt;pool1&lt;/property&gt; </span></p>
<p style="margin-left: 21pt; text-indent: 18pt"><span style="font-size: 9pt">&lt;property&nbsp;name="proxool.xml"&gt;ProxoolConf.xml&lt;/property&gt; </span></p>
<p style="margin-left: 21pt; text-indent: 18pt"><span style="font-size: 9pt">&lt;property&nbsp;name="connection.provider_class"&gt;net.sf.hibernate.connection.ProxoolConnectionProvider&lt;/property&gt;</span></p>
<p style="text-indent: 18pt"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;!-- </span><span style="font-size: 9pt; font-family: 宋体">对象与数据库表格映像文件</span><span style="font-size: 9pt"> --&gt;</span></p>
<p style="text-indent: 21pt"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;mapping resource="com/amigo/pojo/User.hbm.xml"/&gt;</span></p>
<p style="text-indent: 31.5pt"><span style="font-size: 9pt">&lt;mapping resource="com/amigo/pojo/Org.hbm.xml"/&gt;</span></p>
<p style="text-indent: 18pt"><span style="font-size: 9pt">&nbsp;&nbsp;&lt;/session-factory&gt;</span></p>
<p><span style="font-size: 9pt">&lt;/hibernate-configuration&gt;</span></p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">在</span>hibernate.cfg.xml<span style="font-family: 宋体">的同目录下编写</span>proxool<span style="font-family: 宋体">的配置文件：</span><span style="font-size: 9pt">ProxoolConf.xml</span><span style="font-size: 9pt; font-family: 宋体">，该文件的配置实例如下：</span></p>
<p><strong><span style="color: red">ProxoolConf.xml</span></strong></p>
<p><span style="font-size: 9pt">&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</span><span style="font-size: 9pt; font-family: 宋体">只能管理由自己产生的连接</span><span style="font-size: 9pt">--&gt;</span></p>
<p><span style="font-size: 9pt">&lt;!-- </span><span style="font-size: 9pt; font-family: 宋体">驱动的</span><span style="font-size: 9pt">url--&gt;</span></p>
<p><span style="font-size: 9pt">&lt;!-- jdbc:mysql://localhost:3306/dbname?useUnicode=true&amp;characterEncoding=GBK--&gt;</span></p>
<p><span style="font-size: 9pt">&lt;driver-url&gt;&#8230; &lt;/driver-url&gt; </span></p>
<p><span style="font-size: 9pt">&lt;!-- </span><span style="font-size: 9pt; font-family: 宋体">驱动类，</span><span style="font-size: 9pt">eg. com.mysql.jdbc.Driver--&gt;</span></p>
<p><span style="font-size: 9pt">&lt;driver-class&gt;&#8230; &lt;/driver-class&gt; <br />
&lt;driver-properties&gt; </span></p>
<p><span style="font-size: 9pt">&lt;!-- </span><span style="font-size: 9pt; font-family: 宋体">数据库用户名，</span><span style="font-size: 9pt">eg. value</span><span style="font-size: 9pt; font-family: 宋体">为</span><span style="font-size: 9pt">root--&gt;</span></p>
<p><span style="font-size: 9pt">&lt;property&nbsp;name="user"&nbsp;value="&#8230;"/&gt; </span></p>
<p><span style="font-size: 9pt">&lt;!-- </span><span style="font-size: 9pt; font-family: 宋体">数据库密码，</span><span style="font-size: 9pt">eg. value</span><span style="font-size: 9pt; font-family: 宋体">为</span><span style="font-size: 9pt">root--&gt;</span></p>
<p><span style="font-size: 9pt">&lt;property&nbsp;name="password"&nbsp;value="&#8230;."/&gt; <br />
&lt;/driver-properties&gt; <br />
&lt;!--&nbsp;proxool</span><span style="font-size: 9pt; font-family: 宋体">自动侦察各个连接状态的时间间隔</span><span style="font-size: 9pt">(</span><span style="font-size: 9pt; font-family: 宋体">毫秒</span><span style="font-size: 9pt">),</span><span style="font-size: 9pt; font-family: 宋体">侦察到空闲的连接就马上回收</span><span style="font-size: 9pt">,</span><span style="font-size: 9pt; font-family: 宋体">超时的销毁</span><span style="font-size: 9pt">--&gt; <br />
&lt;house-keeping-sleep-time&gt;90000&lt;/house-keeping-sleep-time&gt; <br />
&lt;!--&nbsp;</span><span style="font-size: 9pt; font-family: 宋体">指因未有空闲连接可以分配而在队列中等候的最大请求数</span><span style="font-size: 9pt">,</span><span style="font-size: 9pt; font-family: 宋体">超过这个请求数的用户连接就不会被接受</span><span style="font-size: 9pt">--&gt; <br />
&lt;maximum-new-connections&gt;20&lt;/maximum-new-connections&gt; <br />
&lt;!--&nbsp;</span><span style="font-size: 9pt; font-family: 宋体">最少保持的空闲连接数</span><span style="font-size: 9pt">--&gt; <br />
&lt;prototype-count&gt;5&lt;/prototype-count&gt; <br />
&lt;!--&nbsp;</span><span style="font-size: 9pt; font-family: 宋体">允许最大连接数</span><span style="font-size: 9pt">,</span><span style="font-size: 9pt; font-family: 宋体">超过了这个连接，再有请求时，就排在队列中等候，最大的等待请求数由</span><span style="font-size: 9pt">maximum-new-connections</span><span style="font-size: 9pt; font-family: 宋体">决定</span><span style="font-size: 9pt">--&gt; <br />
&lt;maximum-connection-count&gt;100&lt;/maximum-connection-count&gt; <br />
&lt;!--&nbsp;</span><span style="font-size: 9pt; font-family: 宋体">最小连接数</span><span style="font-size: 9pt">--&gt; <br />
&lt;minimum-connection-count&gt;10&lt;/minimum-connection-count&gt; <br />
&lt;/proxool&gt; <br />
&lt;/something-else-entirely&gt;</span></p>
<h4><span style="font-size: 12pt; line-height: 156%">4. dbcp</span><span style="font-size: 12pt; line-height: 156%; font-family: 黑体">连接池</span></h4>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">在</span>hibernate3.0<span style="font-family: 宋体">中，已经不再支持</span>dbcp<span style="font-family: 宋体">了，</span>hibernate<span style="font-family: 宋体">的作者在</span>hibernate.org<span style="font-family: 宋体">中，明确指出在实践中发现</span>dbcp<span style="font-family: 宋体">有</span>&nbsp;BUG,<span style="font-family: 宋体">在某些种情会产生很多空连接不能释放，所以抛弃了对</span>dbcp<span style="font-family: 宋体">的支持。若需要使用</span>dbcp<span style="font-family: 宋体">，开发人员还需要将</span>commons-pool-1.2.jar&nbsp;<span style="font-family: 宋体">和</span>commons-dbcp-1.2.1.jar<span style="font-family: 宋体">两个</span>jar<span style="font-family: 宋体">包加入到</span>classpath<span style="font-family: 宋体">中。</span>dbcp<span style="font-family: 宋体">与</span>c3p0<span style="font-family: 宋体">一样，都是由</span>hibernate<span style="font-family: 宋体">建立连接的。</span></p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">在</span>hibernate2.0<span style="font-family: 宋体">中的配置建立如下：</span></p>
<p><strong><span style="color: red">hibernate.cfg.xml</span></strong></p>
<p><span style="font-size: 9pt">&lt;?xml version="1.0" encoding="UTF-8"?&gt;</span></p>
<p><span style="font-size: 9pt">&lt;!DOCTYPE&nbsp;hibernate-configuration&nbsp;PUBLIC</span></p>
<p><span style="font-size: 9pt">"-//Hibernate/Hibernate&nbsp;Configuration&nbsp;DTD&nbsp;2.0//EN"</span></p>
<p><span style="font-size: 9pt">"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"&gt;</span></p>
<p><span style="font-size: 9pt">&lt;hibernate-configuration&gt;</span></p>
<p style="text-indent: 18pt"><span style="font-size: 9pt">&lt;session-factory&gt;</span></p>
<p style="text-indent: 18pt"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- </span><span style="font-size: 9pt; font-family: 宋体">显示实际操作数据库时的</span><span style="font-size: 9pt">SQL --&gt;</span></p>
<p style="text-indent: 18pt"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="show_sql"&gt;true&lt;/property&gt;</span></p>
<p style="text-indent: 18pt"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- SQL</span><span style="font-size: 9pt; font-family: 宋体">方言，这边设定的是</span><span style="font-size: 9pt">MySQL --&gt;</span></p>
<p style="text-indent: 18pt"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="dialect"&gt;net.sf.hibernate.dialect.MySQLDialect&lt;/property&gt;</span></p>
<p style="text-indent: 18pt"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--</span><span style="font-size: 9pt; font-family: 宋体">驱动程序，在后续的章节中将讲述</span><span style="font-size: 9pt">mysql</span><span style="font-size: 9pt; font-family: 宋体">、</span><span style="font-size: 9pt">sqlserver</span><span style="font-size: 9pt; font-family: 宋体">和</span><span style="font-size: 9pt">Oracle</span><span style="font-size: 9pt; font-family: 宋体">数据库的配置</span><span style="font-size: 9pt"> --&gt;</span></p>
<p style="text-indent: 18pt"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="connection.driver_class"&gt;&#8230;&#8230;&lt;/property&gt;</span></p>
<p style="text-indent: 18pt"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- JDBC URL --&gt;</span></p>
<p style="text-indent: 18pt"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="connection.url"&gt;&#8230;&#8230;&lt;/property&gt;</span></p>
<p style="text-indent: 18pt"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- </span><span style="font-size: 9pt; font-family: 宋体">数据库用户名</span><span style="font-size: 9pt">,eg. root --&gt;</span></p>
<p style="text-indent: 18pt"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="connection.username"&gt;&#8230;&lt;/property&gt;</span></p>
<p style="text-indent: 18pt"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- </span><span style="font-size: 9pt; font-family: 宋体">数据库密码</span><span style="font-size: 9pt">, eg. root--&gt;</span></p>
<p style="text-indent: 18pt"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="connection.password"&gt;&#8230;&lt;/property&gt;</span></p>
<p style="text-indent: 18pt"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;property&nbsp;name="dbcp.maxActive"&gt;100&lt;/property&gt; </span></p>
<p style="text-indent: 34.4pt"><span style="font-size: 9pt">&lt;property&nbsp;name="dbcp.whenExhaustedAction"&gt;1&lt;/property&gt;</span></p>
<p style="text-indent: 34.4pt"><span style="font-size: 9pt">&lt;property&nbsp;name="dbcp.maxWait"&gt;60000&lt;/property&gt; </span></p>
<p style="text-indent: 34.4pt"><span style="font-size: 9pt">&lt;property&nbsp;name="dbcp.maxIdle"&gt;10&lt;/property&gt; </span></p>
<p style="text-indent: 34.4pt"><span style="font-size: 9pt">&lt;property&nbsp;name="dbcp.ps.maxActive"&gt;100&lt;/property&gt; </span></p>
<p style="text-indent: 34.4pt"><span style="font-size: 9pt">&lt;property&nbsp;name="dbcp.ps.whenExhaustedAction"&gt;1&lt;/property&gt; </span></p>
<p style="text-indent: 34.4pt"><span style="font-size: 9pt">&lt;property&nbsp;name="dbcp.ps.maxWait"&gt;60000&lt;/property&gt; </span></p>
<p style="text-indent: 34.4pt"><span style="font-size: 9pt">&lt;property&nbsp;name="dbcp.ps.maxIdle"&gt;10&lt;/property&gt;</span></p>
<p style="text-indent: 18pt"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- </span><span style="font-size: 9pt; font-family: 宋体">对象与数据库表格映像文件</span><span style="font-size: 9pt"> --&gt;</span></p>
<p style="text-indent: 21pt"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;mapping resource="com/amigo/pojo/User.hbm.xml"/&gt;</span></p>
<p style="margin-left: 21pt; text-indent: 18pt"><span style="font-size: 9pt">&lt;mapping resource="com/amigo/pojo/Org.hbm.xml"/&gt;</span></p>
<p style="text-indent: 18pt"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp; &lt;/session-factory&gt;</span></p>
<p><span style="font-size: 9pt">&lt;/hibernate-configuration&gt;</span></p>
<h4><span style="font-size: 12pt; line-height: 156%">5. MySql</span><span style="font-size: 12pt; line-height: 156%; font-family: 黑体">连接配置</span></h4>
<p style="text-indent: 21pt"><span style="font-family: 宋体">在</span>hibernate<span style="font-family: 宋体">中，可以配置很多种数据库，例如</span>MySql<span style="font-family: 宋体">、</span>Sql Server<span style="font-family: 宋体">和</span>Oracle<span style="font-family: 宋体">，</span>MySql<span style="font-family: 宋体">的配置举例如下：</span></p>
<p><strong><span style="color: red">hibernate.cfg.xml</span></strong></p>
<p><span style="font-size: 9pt">&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />
&lt;!DOCTYPE&nbsp;hibernate-configuration&nbsp;PUBLIC<br />
"-//Hibernate/Hibernate&nbsp;Configuration&nbsp;DTD&nbsp;3.0//EN"<br />
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"&gt;</span></p>
<p><span style="font-size: 9pt">&lt;hibernate-configuration&gt;</span></p>
<p style="text-indent: 13.5pt"><span style="font-size: 9pt">&lt;session-factory&gt;</span></p>
<p style="text-indent: 18pt"><span style="font-size: 9pt">&lt;!-- </span><span style="font-size: 9pt; font-family: 宋体">各属性的配置</span><span style="font-size: 9pt">--&gt;</span></p>
<p style="text-indent: 18pt"><span style="font-size: 9pt">&lt;!—</span><span style="font-size: 9pt; font-family: 宋体">为</span><span style="font-size: 9pt">true</span><span style="font-size: 9pt; font-family: 宋体">表示将</span><span style="font-size: 9pt">Hibernate</span><span style="font-size: 9pt; font-family: 宋体">发送给数据库的</span><span style="font-size: 9pt">sql</span><span style="font-size: 9pt; font-family: 宋体">显示出来</span><span style="font-size: 9pt"> --&gt;</span></p>
<p style="text-indent: 18pt"><span style="font-size: 9pt">&lt;property name="show_sql"&gt;true&lt;/property&gt;</span></p>
<p style="text-indent: 18pt"><span style="font-size: 9pt">&lt;!-- SQL</span><span style="font-size: 9pt; font-family: 宋体">方言，这边设定的是</span><span style="font-size: 9pt">MySQL --&gt;</span></p>
<p style="text-indent: 18pt"><span style="font-size: 9pt">&lt;property name="dialect"&gt;net.sf.hibernate.dialect.MySQLDialect&lt;/property&gt;</span></p>
<p style="text-indent: 18pt"><span style="font-size: 9pt">&lt;!-- </span><span style="font-size: 9pt; font-family: 宋体">一次读的数据库记录数</span><span style="font-size: 9pt"> --&gt;</span></p>
<p style="text-indent: 18pt"><span style="font-size: 9pt">&lt;property name="jdbc.fetch_size"&gt;50&lt;/property&gt;</span></p>
<p style="text-indent: 21pt"><span style="font-size: 9pt">&lt;!-- </span><span style="font-size: 9pt; font-family: 宋体">设定对数据库进行批量删除</span><span style="font-size: 9pt"> --&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="jdbc.batch_size"&gt;30&lt;/property&gt;</span></p>
<p style="text-indent: 18pt"><span style="font-size: 9pt">&lt;!--</span><span style="font-size: 9pt; font-family: 宋体">驱动程序</span><span style="font-size: 9pt">--&gt;</span></p>
<p style="text-indent: 18pt"><span style="font-size: 9pt">&lt;property name="connection.driver_class"&gt;com.mysql.jdbc.Driver&lt;/property&gt;</span></p>
<p style="text-indent: 18pt"><span style="font-size: 9pt">&lt;!-- JDBC URL --&gt;</span></p>
<p style="text-indent: 18pt"><span style="font-size: 9pt">&lt;property name="connection.url"&gt;jdbc:mysql://localhost/dbname?characterEncoding=gb2312&lt;/property&gt;</span></p>
<p style="text-indent: 18pt"><span style="font-size: 9pt">&lt;!-- </span><span style="font-size: 9pt; font-family: 宋体">数据库用户名</span><span style="font-size: 9pt">--&gt;</span></p>
<p style="text-indent: 18pt"><span style="font-size: 9pt">&lt;property name="connection.username"&gt;root&lt;/property&gt;</span></p>
<p style="text-indent: 18pt"><span style="font-size: 9pt">&lt;!-- </span><span style="font-size: 9pt; font-family: 宋体">数据库密码</span><span style="font-size: 9pt">--&gt;</span></p>
<p style="text-indent: 18pt"><span style="font-size: 9pt">&lt;property name="connection.password"&gt;root&lt;/property&gt;</span></p>
<p style="text-indent: 21pt"><span style="font-size: 9pt">&lt;!—</span><span style="font-size: 9pt; font-family: 宋体">映射文件</span><span style="font-size: 9pt"> --&gt;</span></p>
<p style="text-indent: 21pt"><span style="font-size: 9pt">&lt;mapping resource="com/amigo/pojo/User.hbm.xml"/&gt;</span></p>
<p style="text-indent: 21pt"><span style="font-size: 9pt">&lt;mapping resource="com/amigo/pojo/Org.hbm.xml"/&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/session-factory&gt;<br />
&lt;/hibernate-configuration&gt;</span></p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">上面使用的驱动类是</span>com.mysql.jdbc.Driver<span style="font-family: 宋体">。需要将</span>MySql<span style="font-family: 宋体">的连接器</span>jar<span style="font-family: 宋体">包</span>(eg. mysql-connector-java-5.0.4-bin.jar)<span style="font-family: 宋体">加入到</span>classpath<span style="font-family: 宋体">中。</span></p>
<h4><span style="font-size: 12pt; line-height: 156%">6. Sql Server</span><span style="font-size: 12pt; line-height: 156%; font-family: 黑体">连接配置</span></h4>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">本小节讲述一下</span>Sql Server<span style="font-family: 宋体">数据库的</span>hibernate<span style="font-family: 宋体">连接设置，在此只给出连接部分的内容，其余部分与</span>2.2.1.5<span style="font-family: 宋体">一样，在此不再赘述。内容如下：</span></p>
<p style="text-indent: 18pt"><span style="font-size: 9pt">&lt;!--</span><span style="font-size: 9pt; font-family: 宋体">驱动程序</span><span style="font-size: 9pt">--&gt;</span></p>
<p style="text-indent: 18pt"><span style="font-size: 9pt">&lt;property name="connection.driver_class"&gt;net.sourceforge.jtds.jdbc.Driver&lt;/property&gt;</span></p>
<p style="text-indent: 18pt"><span style="font-size: 9pt">&lt;!-- JDBC URL --&gt;</span></p>
<p style="text-indent: 18pt"><span style="font-size: 9pt">&lt;property name="connection.url"&gt;jdbc:jtds:sqlserver://localhost:1433;DatabaseName=dbname&lt;/property&gt;</span></p>
<p style="text-indent: 18pt"><span style="font-size: 9pt">&lt;!-- </span><span style="font-size: 9pt; font-family: 宋体">数据库用户名</span><span style="font-size: 9pt">--&gt;</span></p>
<p style="text-indent: 18pt"><span style="font-size: 9pt">&lt;property name="connection.username"&gt;sa&lt;/property&gt;</span></p>
<p style="text-indent: 18pt"><span style="font-size: 9pt">&lt;!-- </span><span style="font-size: 9pt; font-family: 宋体">数据库密码</span><span style="font-size: 9pt">--&gt;</span></p>
<p style="text-indent: 18pt"><span style="font-size: 9pt">&lt;property name="connection.password"&gt;&lt;/property&gt;</span></p>
<p style="text-indent: 18pt"><span style="font-family: 宋体">上例的驱动类使用的是</span>jtds<span style="font-family: 宋体">的驱动类，因此读者需要将</span>jtds<span style="font-family: 宋体">的</span>jar<span style="font-family: 宋体">包</span>(eg. jtds-1.2.jar)<span style="font-family: 宋体">加入到</span>classpath<span style="font-family: 宋体">中。</span></p>
<h4><span style="font-size: 12pt; line-height: 156%">7. Oracle</span><span style="font-size: 12pt; line-height: 156%; font-family: 黑体">连接配置</span></h4>
<p style="text-indent: 18pt"><span style="font-family: 宋体">本小节讲述一下</span>Sql Server<span style="font-family: 宋体">数据库的</span>hibernate<span style="font-family: 宋体">连接设置，在此只给出连接部分的内容，其余部分与</span>2.2.1.5<span style="font-family: 宋体">一样，在此不再赘述。内容如下：</span></p>
<p style="text-indent: 18pt"><span style="font-size: 9pt">&lt;!--</span><span style="font-size: 9pt; font-family: 宋体">驱动程序</span><span style="font-size: 9pt">--&gt;</span></p>
<p style="text-indent: 18pt"><span style="font-size: 9pt">&lt;property name="connection.driver_class"&gt;oracle.jdbc.driver.OracleDriver&lt;/property&gt;</span></p>
<p style="text-indent: 18pt"><span style="font-size: 9pt">&lt;!-- JDBC URL --&gt;</span></p>
<p style="text-indent: 18pt"><span style="font-size: 9pt">&lt;property name="connection.url"&gt;jdbc:oracle:thin:@localhost:1521:dbname&lt;/property&gt;</span></p>
<p style="text-indent: 18pt"><span style="font-size: 9pt">&lt;!-- </span><span style="font-size: 9pt; font-family: 宋体">数据库用户名</span><span style="font-size: 9pt">--&gt;</span></p>
<p style="text-indent: 18pt"><span style="font-size: 9pt">&lt;property name="connection.username"&gt;test&lt;/property&gt;</span></p>
<p style="text-indent: 18pt"><span style="font-size: 9pt">&lt;!-- </span><span style="font-size: 9pt; font-family: 宋体">数据库密码</span><span style="font-size: 9pt">--&gt;</span></p>
<p style="text-indent: 18pt"><span style="font-size: 9pt">&lt;property name="connection.password"&gt;test&lt;/property&gt;</span></p>
<p><span style="font-size: 10.5pt; font-family: 宋体">上例使用的驱动类为：</span><span style="font-size: 10.5pt; font-family: 'Times New Roman'">oracle.jdbc.driver.OracleDriver</span><span style="font-size: 10.5pt; font-family: 宋体">，开发人员需要将相关的</span><span style="font-size: 10.5pt; font-family: 'Times New Roman'">jar</span><span style="font-size: 10.5pt; font-family: 宋体">包（</span><span style="font-size: 10.5pt; font-family: 'Times New Roman'">ojdbc14.jar</span><span style="font-size: 10.5pt; font-family: 宋体">）加入到</span><span style="font-size: 10.5pt; font-family: 'Times New Roman'">classpath</span><span style="font-size: 10.5pt; font-family: 宋体">中。</span> </p>
<p>&nbsp;</p>
<p>http://www.blogjava.net/amigoxie/archive/2007/12/29/171395.html</p>
<img src ="http://www.blogjava.net/smallfa/aggbug/240730.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/smallfa/" target="_blank">smallfa</a> 2008-11-15 22:03 <a href="http://www.blogjava.net/smallfa/archive/2008/11/15/240730.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【Ｈibernate总结系列】使用举例 </title><link>http://www.blogjava.net/smallfa/archive/2008/11/15/240729.html</link><dc:creator>smallfa</dc:creator><author>smallfa</author><pubDate>Sat, 15 Nov 2008 13:58:00 GMT</pubDate><guid>http://www.blogjava.net/smallfa/archive/2008/11/15/240729.html</guid><wfw:comment>http://www.blogjava.net/smallfa/comments/240729.html</wfw:comment><comments>http://www.blogjava.net/smallfa/archive/2008/11/15/240729.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/smallfa/comments/commentRss/240729.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/smallfa/services/trackbacks/240729.html</trackback:ping><description><![CDATA[<div class="postTitle"><a class="postTitle2" id="viewpost1_TitleUrl" href="http://www.blogjava.net/amigoxie/archive/2008/01/01/171972.html">【Ｈibernate总结系列】使用举例</a> </div>
&nbsp;
<p><span style="font-family: 宋体">本节讲述如何使用</span>Hibernate<span style="font-family: 宋体">实现记录的增、删、改和查功能。</span></p>
<h2>1 <span style="font-family: 黑体">查询</span></h2>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">在</span>Hibernate<span style="font-family: 宋体">中使用查询时，一般使用</span>Hql<span style="font-family: 宋体">查询语句。</span></p>
<p style="text-indent: 21pt">HQL<span style="font-family: 宋体">（</span>Hibernate Query Language<span style="font-family: 宋体">），即</span>Hibernate<span style="font-family: 宋体">的查询语言跟</span>SQL<span style="font-family: 宋体">非常相像。不过</span>HQL<span style="font-family: 宋体">与</span>SQL<span style="font-family: 宋体">的最根本的区别，就是它是面向对象的。</span></p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">使用</span>HQL<span style="font-family: 宋体">时需要注意以下几点：</span></p>
<p style="margin-left: 42pt; text-indent: -21pt; tab-stops: list 42.0pt"><span style="font-family: Wingdings">l<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><strong><span style="font-family: 宋体">大小写敏感</span></strong></p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">因为</span>HQL<span style="font-family: 宋体">是面向对象的，而对象类的名称和属性都是大小写敏感的，所以</span>HQL<span style="font-family: 宋体">是大小写敏感的。</span></p>
<p style="text-indent: 21pt">Eg. </p>
<p style="text-indent: 21pt">HQL<span style="font-family: 宋体">语句：</span>from Cat as cat where cat.id &gt; 1;<span style="font-family: 宋体">与</span>from Cat as cat where cat.ID &gt; 1;<span style="font-family: 宋体">是不一样的，这点与</span>SQL<span style="font-family: 宋体">不同。</span></p>
<p style="margin-left: 42pt; text-indent: -21pt; tab-stops: list 42.0pt"><span style="font-family: Wingdings">l<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><strong>from</strong><strong><span style="font-family: 宋体">子句</span></strong></p>
<p style="text-indent: 21pt">Eg. from Cat<span style="font-family: 宋体">，该句返回</span>Cat<span style="font-family: 宋体">对象实例，开发人员也可以给其加上别名，</span>eg. from Cat as cat<span style="font-family: 宋体">，对于多表查询的情况，可参考如下：</span></p>
<p style="text-indent: 21pt"><span style="font-size: 9pt">from Cat as cat, Dog as dog</span></p>
<p style="margin-left: 21pt"><span style="font-family: 宋体">其它方面都与</span>SQL<span style="font-family: 宋体">类似，在此不再赘述。</span></p>
<p style="margin-left: 21pt"><span style="font-family: 宋体">接下来讲一个在</span>Hibernate<span style="font-family: 宋体">中查询的例子。</span></p>
<h4><span style="font-size: 12pt; line-height: 156%">1.1</span><span style="font-size: 12pt; line-height: 156%; font-family: 黑体">简单查询</span></h4>
<p style="text-indent: 21pt"><span style="font-size: 9pt">List list = session.createQuery("from User as user order by user.loginName").list();</span></p>
<h4><span style="font-size: 12pt; line-height: 156%">1.2</span><span style="font-size: 12pt; line-height: 156%; font-family: 黑体">带单个参数的查询</span></h4>
<p style="margin-left: 21pt"><span style="font-size: 9pt">List list = session.find("from User as user where user.loginName=?",</span></p>
<p style="margin-left: 21pt"><span style="font-size: 9pt">&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;loginName,</span></p>
<p style="margin-left: 21pt"><span style="font-size: 9pt">&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Hibernate.STRING);</span></p>
<h4><span style="font-size: 12pt; line-height: 156%">1.3</span><span style="font-size: 12pt; line-height: 156%; font-family: 黑体">多个参数的查询</span></h4>
<p>Eg1. <span style="font-family: 宋体">此例采用&#8220;</span>?<span style="font-family: 宋体">&#8221;占位符的方式</span></p>
<p style="text-indent: 21pt"><span style="font-size: 9pt">String hql = "from User as user where user.loginName=? and user.orgId=? ";</span></p>
<p style="margin-left: 21pt"><span style="font-size: 9pt">Query query = session.createQuery(hql);</span></p>
<p style="text-indent: 21pt"><span style="font-size: 9pt">query.setParameter(1, 'amigo');</span></p>
<p style="text-indent: 21pt"><span style="font-size: 9pt">query.setParameter(2, new Long(1)) ;</span></p>
<p style="text-indent: 21pt"><span style="font-size: 9pt">List list = query .list();</span></p>
<p>Eg2. <span style="font-family: 宋体">此例采用&#8220;</span>:paramName<span style="font-family: 宋体">&#8221;的方式</span></p>
<p style="text-indent: 21pt"><span style="font-size: 9pt">String hql = "from User as user where user.loginName=:loginName and user.orgId=:orgId ";</span></p>
<p style="margin-left: 21pt"><span style="font-size: 9pt">Query query = session.createQuery(hql);</span></p>
<p style="text-indent: 21pt"><span style="font-size: 9pt">query.setParameter('loginName', 'amigo');</span></p>
<p style="text-indent: 21pt"><span style="font-size: 9pt">query.setParameter('orgId', new Long(1)) ;</span></p>
<p style="text-indent: 21pt"><span style="font-size: 9pt">List list = query .list();</span></p>
<h4><span style="font-size: 12pt; line-height: 156%">1.4</span><span style="font-size: 12pt; line-height: 156%; font-family: 黑体">查询数量</span></h4>
<p style="margin-left: 21pt"><span style="font-size: 9pt">int count &nbsp;= (Integer) session.createQuery("select count(*) from User").uniqueResult().intValue();</span></p>
<h4><span style="font-size: 12pt; line-height: 156%">1.5</span><span style="font-size: 12pt; line-height: 156%; font-family: 黑体">限制查询起始值和数量的查询</span></h4>
<p style="text-indent: 21pt"><span style="font-family: 宋体">这种一般是在记录需要分页的时候需要用到，例如，在如下的代码中，限制查询的开始记录的位置为</span>50<span style="font-family: 宋体">，最大查询条数为</span>50<span style="font-family: 宋体">。</span></p>
<p style="text-indent: 21pt"><span style="font-size: 9pt">String hql = "from User as user order by user.loginName";</span></p>
<p style="text-indent: 21pt"><span style="font-size: 9pt">int firstResult= 50;</span></p>
<p style="text-indent: 21pt"><span style="font-size: 9pt">int maxResults = 50;</span></p>
<p style="margin-left: 21pt"><span style="font-size: 9pt">Query query = session.createQuery(hql);</span></p>
<p style="text-indent: 21pt; text-align: left" align="left"><span style="font-size: 9pt">query = query.setFirstResult(firstResult);</span></p>
<p style="margin-left: 21pt"><span style="font-size: 9pt">query.setMaxResults(maxResults);</span></p>
<h4><span style="font-size: 12pt; line-height: 156%">1.6</span><span style="font-size: 12pt; line-height: 156%; font-family: 黑体">子查询</span></h4>
<p style="text-indent: 21pt"><span style="font-family: 宋体">在某些情况下，也需要用到子查询，例如在下面的例子中，</span>User<span style="font-family: 宋体">为用户对象，</span>UserRole<span style="font-family: 宋体">为用户与角色关联对象。如下</span>HQL<span style="font-family: 宋体">语句将没有分配角色的用户对象查找出来。</span></p>
<p style="margin-left: 21pt"><span style="font-size: 9pt">String hql = "from User user where user.loginName"</span></p>
<p style="margin-left: 42pt; text-indent: 21pt"><span style="font-size: 9pt">+ " not in(select ur.user.loginName from UserRole ur) ";</span></p>
<p style="margin-left: 21pt"><span style="font-size: 9pt">List list = (session.createQuery(hql)).list();</span></p>
<h4><span style="font-size: 12pt; line-height: 156%">1.7</span><span style="font-size: 12pt; line-height: 156%; font-family: 黑体">原生</span><span style="font-size: 12pt; line-height: 156%">SQL</span><span style="font-size: 12pt; line-height: 156%; font-family: 黑体">查询</span></h4>
<p style="text-indent: 21pt"><span style="font-family: 宋体">对于某些复杂的查询语句，需要调用某种特定的数据库的特定函数才能解决，</span>Hibernate<span style="font-family: 宋体">虽然不推荐使用原生</span>SQL<span style="font-family: 宋体">语句来查询，因为这将破坏数据库的易移植性，但是</span>Hibernate<span style="font-family: 宋体">中也提供了使用原生</span>SQL<span style="font-family: 宋体">进行查询的方法，只需要获得连接即可。</span></p>
<p>Eg. <span style="font-family: 宋体">在下面的例子中，用到了</span>Sql Server<span style="font-family: 宋体">数据库中的原生</span>sql<span style="font-family: 宋体">语句，如下所示：</span></p>
<p style="text-indent: 21pt"><span style="font-size: 9pt">String timeUnit = "13";</span></p>
<p style="text-indent: 21pt; text-align: left" align="left"><span style="font-size: 9pt">String sql = "select count(*) count, CONVERT(VARCHAR(" + timeUnit +"), &nbsp;log.gen_datetime,121) timeUnit " + "from Log log";</span></p>
<p style="text-indent: 21pt; text-align: left" align="left"><span style="font-size: 9pt">SQLQuery query = session.createSQLQuery(sql)</span></p>
<p style="margin-left: 63pt; text-indent: 21pt; text-align: left" align="left"><span style="font-size: 9pt">.addScalar("count", Hibernate.INTEGER)</span></p>
<p style="margin-left: 63pt; text-indent: 21pt; text-align: left" align="left"><span style="font-size: 9pt">.addScalar("timeUnit", Hibernate.STRING);</span></p>
<p style="text-indent: 21pt"><span style="font-size: 9pt">List list = query.list();</span></p>
<h2>2 <span style="font-family: 黑体">新增</span></h2>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">在数据库中新增记录在</span>Hibernate<span style="font-family: 宋体">中不需要使用</span>insert<span style="font-family: 宋体">命令，只需要构造新增的对象后，调用</span>Session<span style="font-family: 宋体">对象的</span>save(&#8230;)<span style="font-family: 宋体">方法即可。</span></p>
<h4><span style="font-size: 12pt; line-height: 156%">2.1</span><span style="font-size: 12pt; line-height: 156%; font-family: 黑体">新增单个对象</span></h4>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">新增单个对象的实例如下，该实例将在用户表中新增一条记录。</span></p>
<p style="text-indent: 21pt"><span style="font-size: 9pt">Session session = HibernateSessionFactory.getSession();</span></p>
<p><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Transaction ts = null;</span></p>
<p style="text-indent: 21pt"><span style="font-size: 9pt">try {</span></p>
<p style="margin-left: 21pt; text-indent: 21pt"><span style="font-size: 9pt">ts = session.beginTransaction();</span></p>
<p><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; User user = new User();</span></p>
<p><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; user.setLoginName("amigo");</span></p>
<p><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; user.setFullName("</span><span style="font-size: 9pt; font-family: 宋体">阿蜜果</span><span style="font-size: 9pt">");</span></p>
<p><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8230;&#8230;</span></p>
<p><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; session.save(user) ;</span></p>
<p><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ts.commit();</span></p>
<p style="text-indent: 21pt"><span style="font-size: 9pt">} catch (Exception e) {</span></p>
<p style="text-align: left" align="left"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (ts != null) {</span></p>
<p style="margin-left: 42pt; text-indent: 21pt"><span style="font-size: 9pt">ts.rollback();</span></p>
<p style="margin-left: 21pt; text-indent: 21pt"><span style="font-size: 9pt">}</span></p>
<p style="text-indent: 21pt"><span style="font-size: 9pt">} finally {</span></p>
<p style="text-align: left" align="left"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HibernateSessionFactory.closeSession();</span></p>
<p style="text-indent: 21pt"><span style="font-size: 9pt">}</span></p>
<h4><span style="font-size: 12pt; line-height: 156%">2.2</span><span style="font-size: 12pt; line-height: 156%; font-family: 黑体">批量新增对象</span></h4>
<p style="text-indent: 21pt"><span style="font-family: 宋体">对于批量新增对象的情况，需要在新增一部分对象后</span>flush<span style="font-family: 宋体">和</span>clear<span style="font-family: 宋体">一次，例如，没批量新增</span>20<span style="font-family: 宋体">个对象时手动的</span>flush<span style="font-family: 宋体">一次，假设在</span>list<span style="font-family: 宋体">为一个用户列表，里面包含很多</span>User<span style="font-family: 宋体">对象，那么要将实现这些对象的批量新增，可采用如下方法：</span></p>
<p style="text-indent: 21pt"><span style="font-size: 9pt">Session session = HibernateSessionFactory.getSession();</span></p>
<p style="text-indent: 21pt"><span style="font-size: 9pt">Transaction ts = null;</span></p>
<p style="text-indent: 21pt"><span style="font-size: 9pt">try {</span></p>
<p style="margin-left: 21pt; text-indent: 21pt"><span style="font-size: 9pt">ts = session.beginTransaction();</span></p>
<p style="margin-left: 21pt; text-indent: 21pt; text-align: left" align="left"><span style="font-size: 9pt">for (int i = 0; i &lt; list.size(); i++) {</span></p>
<p style="text-align: left" align="left"><span style="font-size: 9pt">&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 user = (User) list.get(i);</span></p>
<p style="text-align: left" align="left"><span style="font-size: 9pt">&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; session.save(user) ;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 9pt">&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; if (i % 20 == 0) {</span></p>
<p style="margin-left: 42pt; text-indent: 21pt; text-align: left" align="left"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; session.flush();</span></p>
<p style="margin-left: 42pt; text-indent: 21pt; text-align: left" align="left"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; session.clear();</span></p>
<p style="margin-left: 42pt; text-indent: 21pt; text-align: left" align="left"><span style="font-size: 9pt">}</span></p>
<p><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ts.commit();</span></p>
<p style="text-indent: 21pt"><span style="font-size: 9pt">} catch (Exception e) {</span></p>
<p style="text-align: left" align="left"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (ts != null) {</span></p>
<p style="margin-left: 42pt; text-indent: 21pt"><span style="font-size: 9pt">ts.rollback();</span></p>
<p style="margin-left: 21pt; text-indent: 21pt"><span style="font-size: 9pt">}</span></p>
<p style="text-indent: 21pt"><span style="font-size: 9pt">} finally {</span></p>
<p style="text-align: left" align="left"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HibernateSessionFactory.closeSession();</span></p>
<p style="text-indent: 21pt"><span style="font-size: 9pt">}</span></p>
<h2>3 <span style="font-family: 黑体">更新</span></h2>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">在</span>hibernate<span style="font-family: 宋体">中，更新对象前不需要使用查询语句：</span>update&#8230;<span style="font-family: 宋体">，一般需要在取得需要更新的持久化对象后，执行</span>Session<span style="font-family: 宋体">对象的</span>update(&#8230;)<span style="font-family: 宋体">方法。例如：</span></p>
<p style="text-indent: 21pt"><span style="font-size: 9pt">Session session = HibernateSessionFactory.getSession();</span></p>
<p style="text-indent: 21pt"><span style="font-size: 9pt">Transaction ts = null;</span></p>
<p style="text-indent: 21pt"><span style="font-size: 9pt">try {</span></p>
<p style="margin-left: 21pt; text-indent: 21pt"><span style="font-size: 9pt">ts = session.beginTransaction();</span></p>
<p style="margin-left: 21pt; text-indent: 21pt"><span style="font-size: 9pt">//</span><span style="font-size: 9pt; font-family: 宋体">取得持久化对象</span></p>
<p><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; User user = session.get(User.class, "amigo");</span></p>
<p><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //</span><span style="font-size: 9pt; font-family: 宋体">对需要修改的属性进行修改</span></p>
<p><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; user.setFullName("</span><span style="font-size: 9pt; font-family: 宋体">阿蜜果</span><span style="font-size: 9pt">");</span></p>
<p><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8230;&#8230;</span></p>
<p><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; session.update(user) ;</span></p>
<p><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ts.commit();</span></p>
<p style="text-indent: 21pt"><span style="font-size: 9pt">} catch (Exception e) {</span></p>
<p style="text-align: left" align="left"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (ts != null) {</span></p>
<p style="margin-left: 42pt; text-indent: 21pt"><span style="font-size: 9pt">ts.rollback();</span></p>
<p style="margin-left: 21pt; text-indent: 21pt"><span style="font-size: 9pt">}</span></p>
<p style="text-indent: 21pt"><span style="font-size: 9pt">} finally {</span></p>
<p style="text-align: left" align="left"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HibernateSessionFactory.closeSession();</span></p>
<p style="text-indent: 21pt"><span style="font-size: 9pt">}</span></p>
<h2>4 <span style="font-family: 黑体">删除</span></h2>
<h4><span style="font-size: 12pt; line-height: 156%">4.1</span><span style="font-size: 12pt; line-height: 156%; font-family: 黑体">删除单个对象</span></h4>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">一般在取得某对象后，开发人员可以调用</span>Session<span style="font-family: 宋体">对象的</span>delete(&#8230;)<span style="font-family: 宋体">方法删除该对象。</span></p>
<p>Eg. <span style="font-family: 宋体">下面的实例中取得</span>loginName<span style="font-family: 宋体">（主键）为&#8220;</span>amigo<span style="font-family: 宋体">&#8221;的</span>User<span style="font-family: 宋体">对象后，将它删除。</span></p>
<p style="text-indent: 21pt"><span style="font-size: 9pt">Session session = HibernateSessionFactory.getSession();</span></p>
<p style="text-indent: 21pt"><span style="font-size: 9pt">Transaction ts = null;</span></p>
<p style="text-indent: 21pt"><span style="font-size: 9pt">try {</span></p>
<p style="margin-left: 21pt; text-indent: 21pt"><span style="font-size: 9pt">ts = session.beginTransaction();</span></p>
<p style="margin-left: 21pt; text-indent: 21pt"><span style="font-size: 9pt">//</span><span style="font-size: 9pt; font-family: 宋体">取得持久化对象</span></p>
<p><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; User user = session.get(User.class, "amigo");</span></p>
<p><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; session.delete(user) ;</span></p>
<p><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ts.commit();</span></p>
<p style="text-indent: 21pt"><span style="font-size: 9pt">} catch (Exception e) {</span></p>
<p style="text-align: left" align="left"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (ts != null) {</span></p>
<p style="margin-left: 42pt; text-indent: 21pt"><span style="font-size: 9pt">ts.rollback();</span></p>
<p style="margin-left: 21pt; text-indent: 21pt"><span style="font-size: 9pt">}</span></p>
<p style="text-indent: 21pt"><span style="font-size: 9pt">} finally {</span></p>
<p style="text-align: left" align="left"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HibernateSessionFactory.closeSession();</span></p>
<p style="text-indent: 21pt"><span style="font-size: 9pt">}</span></p>
<h4><span style="font-size: 12pt; line-height: 156%">4.2</span><span style="font-size: 12pt; line-height: 156%; font-family: 黑体">批量删除对象</span></h4>
<p style="text-indent: 21pt"><span style="font-family: 宋体">对于批量删除对象的情况，开发人员可以在取得待删除的对象列表后，一个一个的将对象删除，对于每个对象的删除方法，见</span>3.4.1<span style="font-family: 宋体">小节。开发人员还可以</span>hql<span style="font-family: 宋体">语句来做批量删除。</span></p>
<p>Eg. <span style="font-family: 宋体">该实例通过</span>delete<span style="font-family: 宋体">语句来删除记录，除了</span>loginName<span style="font-family: 宋体">为&#8220;</span>amigo<span style="font-family: 宋体">&#8221;的对象为，其余都删除，代码如下所示：</span></p>
<p style="text-indent: 21pt"><span style="font-size: 9pt">Session session = HibernateSessionFactory.getSession();</span></p>
<p style="text-indent: 21pt"><span style="font-size: 9pt">Transaction ts = null;</span></p>
<p style="text-indent: 21pt"><span style="font-size: 9pt">try {</span></p>
<p style="margin-left: 19.5pt; text-indent: 22.5pt"><span style="font-size: 9pt">ts = session.beginTransaction();</span></p>
<p style="margin-left: 19.5pt; text-indent: 21pt"><span style="font-size: 9pt">String hql = "delete User as user where user.loginName != 'amigo'";</span></p>
<p style="margin-left: 19.5pt; text-indent: 21pt"><span style="font-size: 9pt">Query query = session.createQuery(hql);</span></p>
<p style="margin-left: 19.5pt; text-indent: 21pt"><span style="font-size: 9pt">int count &nbsp;= query.executeUpdate();</span></p>
<p style="margin-left: 19.5pt; text-indent: 21pt"><span style="font-size: 9pt">&nbsp;ts.commit();</span></p>
<p style="margin-left: 19.5pt; text-indent: 21pt"><span style="font-size: 9pt">System.out.println("delete count : " + count); //</span><span style="font-size: 9pt; font-family: 宋体">删除条数</span></p>
<p style="text-indent: 21pt">}<span style="font-size: 9pt"> catch (Exception e) {</span></p>
<p style="text-align: left" align="left"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (ts != null) {</span></p>
<p style="margin-left: 42pt; text-indent: 21pt"><span style="font-size: 9pt">ts.rollback();</span></p>
<p style="margin-left: 21pt; text-indent: 21pt"><span style="font-size: 9pt">}</span></p>
<p style="text-indent: 21pt"><span style="font-size: 9pt">} finally {</span></p>
<p style="text-align: left" align="left"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HibernateSessionFactory.closeSession();</span></p>
<p style="text-indent: 21pt"><span style="font-size: 9pt">}</span></p>
http://www.blogjava.net/amigoxie/archive/2008/01/01/171972.html
<img src ="http://www.blogjava.net/smallfa/aggbug/240729.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/smallfa/" target="_blank">smallfa</a> 2008-11-15 21:58 <a href="http://www.blogjava.net/smallfa/archive/2008/11/15/240729.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【Ｈibernate总结系列】常见异常总结（不断补充） </title><link>http://www.blogjava.net/smallfa/archive/2008/11/15/240726.html</link><dc:creator>smallfa</dc:creator><author>smallfa</author><pubDate>Sat, 15 Nov 2008 13:52:00 GMT</pubDate><guid>http://www.blogjava.net/smallfa/archive/2008/11/15/240726.html</guid><wfw:comment>http://www.blogjava.net/smallfa/comments/240726.html</wfw:comment><comments>http://www.blogjava.net/smallfa/archive/2008/11/15/240726.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/smallfa/comments/commentRss/240726.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/smallfa/services/trackbacks/240726.html</trackback:ping><description><![CDATA[&nbsp;
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">本文总结</span>Hibernate<span style="font-family: 宋体">中常见的异常。</span></p>
<h2>1. net.sf.hibernate.MappingException</h2>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">当出现</span>net.sf.hibernate.MappingException: Error reading resource:&#8230;<span style="font-family: 宋体">异常时一般是因为映射文件出现错误。</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">当出现</span>net.sf.hibernate.MappingException: Resource: &#8230; not found<span style="font-family: 宋体">是因为</span>XML<span style="font-family: 宋体">配置文件没找到所致，有可能是放置目录不正确，或者没将其加入</span>hibernate.cfg.xml<span style="font-family: 宋体">中。</span></p>
<h2>2. net.sf.hibernate.PropertyNotFoundException</h2>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">当出现</span>net.sf.hibernate.PropertyNotFoundException: Could not find a setter for property name in class &#8230;<span style="font-family: 宋体">时，原因一般是因为</span>XML<span style="font-family: 宋体">映射文件中的属性与对应的</span>Java<span style="font-family: 宋体">类中的属性的</span>getter<span style="font-family: 宋体">或</span>setter<span style="font-family: 宋体">方法不一致。</span></p>
<h2>3. org.hibernate.id.IdentifierGenerationException</h2>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">当出现</span>org.hibernate.id.IdentifierGenerationException: ids for this class must be manually assigned before calling save():<span style="font-family: 宋体">异常时，一般是因为</span>&lt;id&gt;<span style="font-family: 宋体">元素配置不正确，</span>&lt;id&gt;<span style="font-family: 宋体">元素缺少其子元素</span>&lt;generator&gt;&lt;/generator&gt;<span style="font-family: 宋体">的配置引起。</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">解决方案：</span>&lt;id&gt;<span style="font-family: 宋体">元素映射了相应数据库表的主键字段，对其子元素</span>&lt;generator class=""&gt;,<span style="font-family: 宋体">其中</span>class<span style="font-family: 宋体">的取值可以为</span>increment<span style="font-family: 宋体">、</span>identity<span style="font-family: 宋体">、</span>sequence<span style="font-family: 宋体">、</span>hilo<span style="font-family: 宋体">、</span>native&#8230;&#8230;<span style="font-family: 宋体">等，更多的可参考</span>hibernate<span style="font-family: 宋体">参考文档，一般取其值为</span>native <span style="font-family: 宋体">。具体可参考</span>2.2.2.1<span style="font-family: 宋体">小节。</span></p>
<h2>4. a different object with the same identifier value was already associated with the session</h2>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">当出现</span>a different object with the same identifier value was already associated with the session<span style="font-family: 宋体">时，一般是因为在</span>hibernate<span style="font-family: 宋体">中同一个</span>session<span style="font-family: 宋体">里面有了两个相同标识但是是不同实体。</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">有如下几种解决方案：</span></p>
<p style="text-indent: 15.75pt"><span style="font-family: 宋体">（</span>1<span style="font-family: 宋体">）使用</span>session.clean()<span style="font-family: 宋体">，如果在</span>clean<span style="font-family: 宋体">操作后面又进行了</span>saveOrUpdate(object)<span style="font-family: 宋体">等改变数据状态的操作，有可能会报出</span>"Found two representations of same collection"<span style="font-family: 宋体">异常。</span></p>
<p style="text-indent: 15.75pt; text-align: left" align="left"><span style="font-family: 宋体">（</span>2<span style="font-family: 宋体">）使用</span>session.refresh(object)<span style="font-family: 宋体">，当</span>object<span style="font-family: 宋体">不是数据库中已有数据的对象的时候，不能使用</span>session.refresh(object)<span style="font-family: 宋体">因为该方法是从</span>hibernate<span style="font-family: 宋体">的</span>session<span style="font-family: 宋体">中去重新取</span>object<span style="font-family: 宋体">，如果</span>session<span style="font-family: 宋体">中没有这个对象，则会报错所以当你使用</span>saveOrUpdate(object)<span style="font-family: 宋体">之前还需要判断一下。</span></p>
<p style="text-indent: 15.75pt"><span style="font-family: 宋体">（</span>3<span style="font-family: 宋体">）</span>session.merge(object)<span style="font-family: 宋体">，</span>Hibernate<span style="font-family: 宋体">里面自带的方法，推荐使用。</span></p>
<h2>5. SQL Grammer Exception,Could not execute JDBC batch update</h2>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">当出现</span>SQL Grammer Exception,Could not execute JDBC batch update<span style="font-family: 宋体">异常时，一般是由如下问题引起：</span></p>
<p><span style="font-family: 宋体">（</span>1<span style="font-family: 宋体">）</span>SQL<span style="font-family: 宋体">语句中存在语法错误或是传入的数据有误</span>;</p>
<p style="word-break: break-all; line-height: 160%; text-align: left" align="left"><span style="font-family: 宋体">（</span>2<span style="font-family: 宋体">）数据库的配置不合法，或者说是配置有误。较容易出现的有数据表的映射文件</span>(,hbm.xml<span style="font-family: 宋体">文件</span>)<span style="font-family: 宋体">配置有误；</span>Hibernate.cfg.xml<span style="font-family: 宋体">文件配置有误</span>;</p>
<p style="word-break: break-all; line-height: 160%; text-align: left" align="left"><span style="font-family: 宋体">（</span>3<span style="font-family: 宋体">）</span>&nbsp;<span style="font-family: 宋体">当前的数据库用户权限不足，不能操作数据库。以是以</span>Oracle <span style="font-family: 宋体">数据库为例，这种情况下在错误提示中会显示</span>java.sql.BatchUpdateException: ORA-01031: insufficient privileges<span style="font-family: 宋体">这样的信息。</span></p>
<p style="word-break: break-all; line-height: 160%; text-align: left" align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">针对上面的各种原因，开发人员可以找出对应的解决方案。</span></p>
http://www.blogjava.net/amigoxie/category/19976.html
<img src ="http://www.blogjava.net/smallfa/aggbug/240726.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/smallfa/" target="_blank">smallfa</a> 2008-11-15 21:52 <a href="http://www.blogjava.net/smallfa/archive/2008/11/15/240726.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【Ｈibernate总结系列】....hbm.xml配置 </title><link>http://www.blogjava.net/smallfa/archive/2008/11/15/240720.html</link><dc:creator>smallfa</dc:creator><author>smallfa</author><pubDate>Sat, 15 Nov 2008 13:17:00 GMT</pubDate><guid>http://www.blogjava.net/smallfa/archive/2008/11/15/240720.html</guid><wfw:comment>http://www.blogjava.net/smallfa/comments/240720.html</wfw:comment><comments>http://www.blogjava.net/smallfa/archive/2008/11/15/240720.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/smallfa/comments/commentRss/240720.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/smallfa/services/trackbacks/240720.html</trackback:ping><description><![CDATA[&nbsp;<span style="font-family: 宋体">在</span>Hibernate<span style="font-family: 宋体">中，各表的映射文件</span>&#8230;.hbm.xml<span style="font-family: 宋体">可以通过工具生成，例如在使用</span>MyEclipse<span style="font-family: 宋体">开发时，它提供了自动生成映射文件的工具。本节简单的讲述一下这些配置文件的配置。</span>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">配置文件的基本结构如下：</span></p>
<p style="text-align: left" align="left"><span style="font-size: 9pt">&lt;?xml version="1.0" encoding='UTF-8'?&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 9pt">&lt;!DOCTYPE hibernate-mapping PUBLIC</span></p>
<p style="text-align: left" align="left"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "-//Hibernate/Hibernate Mapping DTD 3.0//EN"</span></p>
<p style="text-align: left" align="left"><span style="font-size: 9pt">&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; "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" &gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 9pt">&lt;hibernate-mapping package="</span><span style="font-size: 9pt; font-family: 宋体">包名</span><span style="font-size: 9pt">"&gt; </span></p>
<p style="text-indent: 21.75pt; text-align: left" align="left"><span style="font-size: 9pt">&lt;class name="</span><span style="font-size: 9pt; font-family: 宋体">类名</span><span style="font-size: 9pt">" table="</span><span style="font-size: 9pt; font-family: 宋体">表名</span><span style="font-size: 9pt">"&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;id name="</span><span style="font-size: 9pt; font-family: 宋体">主键在</span><span style="font-size: 9pt">java</span><span style="font-size: 9pt; font-family: 宋体">类中的字段名</span><span style="font-size: 9pt">" column="</span><span style="font-size: 9pt; font-family: 宋体">对应表中字段</span><span style="font-size: 9pt">" type="</span><span style="font-size: 9pt; font-family: 宋体">类型</span><span style="font-size: 9pt"> "&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;generator class="</span><span style="font-size: 9pt; font-family: 宋体">主键生成策略</span><span style="font-size: 9pt">"/&gt;</span></p>
<p style="margin-left: 20.25pt; text-indent: 21.75pt; text-align: left" align="left"><span style="font-size: 9pt">&lt;/id&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&#8230;&#8230;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp; &lt;/class&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 9pt">&lt;/hibernate-mapping&gt;</span></p>
<h4><span style="font-size: 12pt; line-height: 156%">1. </span><span style="font-size: 12pt; line-height: 156%; font-family: 黑体">主键（</span><span style="font-size: 12pt; line-height: 156%">id</span><span style="font-size: 12pt; line-height: 156%; font-family: 黑体">）</span></h4>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Hibernate<span style="font-family: 宋体">的主键生成策略有如下几种：</span></p>
<p style="text-indent: 21pt">1) &nbsp;assigned</p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">主键由外部程序负责生成，在</span> save() <span style="font-family: 宋体">之前指定。</span></p>
<p style="text-indent: 21pt">2) &nbsp;hilo</p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">通过</span>hi/lo <span style="font-family: 宋体">算法实现的主键生成机制，需要额外的数据库表或字段提供高位值来源。</span></p>
<p style="text-indent: 21pt">3) &nbsp;seqhilo</p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">与</span>hilo <span style="font-family: 宋体">类似，通过</span>hi/lo <span style="font-family: 宋体">算法实现的主键生成机制，需要数据库中的</span> Sequence<span style="font-family: 宋体">，适用于支持</span> Sequence <span style="font-family: 宋体">的数据库，如</span>Oracle<span style="font-family: 宋体">。</span></p>
<p style="text-indent: 21pt">4) &nbsp;increment</p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">主键按数值顺序递增。此方式的实现机制为在当前应用实例中维持一个变量，以保存着当前的最大值，之后每次需要生成主键的时候将此值加</span>1<span style="font-family: 宋体">作为主键。这种方式可能产生的问题是：不能在集群下使用。</span></p>
<p style="text-indent: 21pt">5) &nbsp;identity</p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt"><span style="font-size: 10.5pt">采用数据库提供的主键生成机制。如DB2、SQL Server、MySQL 中的主键生成机制。 </span></p>
<p style="text-indent: 21pt">6) &nbsp;sequence</p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">采用数据库提供的</span> sequence <span style="font-family: 宋体">机制生成主键。如</span> Oralce <span style="font-family: 宋体">中的</span>Sequence<span style="font-family: 宋体">。</span></p>
<p style="text-indent: 21pt">7) &nbsp;native</p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt"><span style="font-size: 10.5pt">由 Hibernate 根据使用的数据库自行判断采用 identity、hilo、sequence 其中一种作为主键生成方式。 </span></p>
<p style="text-indent: 21pt">8) &nbsp;uuid.hex</p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt"><span style="font-size: 10.5pt">由 Hibernate 基于128 位 UUID 算法 生成16 进制数值（编码后以长度32 的字符串表示）作为主键。 </span></p>
<p style="text-indent: 21pt">9) &nbsp;uuid.string</p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">与</span>uuid.hex <span style="font-family: 宋体">类似，只是生成的主键未进行编码（长度</span>16<span style="font-family: 宋体">），不能应用在</span> PostgreSQL <span style="font-family: 宋体">数据库中。</span></p>
<p style="text-indent: 21pt">10) foreign</p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt"><span style="font-size: 10.5pt">使用另外一个相关联的对象的标识符作为主键。 </span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt"><span style="font-size: 10.5pt">主键配置举例如下：</span></p>
<p style="text-indent: 21pt; text-align: left" align="left"><span style="font-size: 9pt">&lt;id name="id" column="id" type="java.lang.Integer"&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;generator class="native"/&gt;</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt"><span style="font-size: 9pt; font-family: 'Times New Roman'">&lt;/id&gt;</span></p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">另外还可以扩展</span>Hibernate<span style="font-family: 宋体">的类来做自己的主键生成策略，具体例子见：</span><a href="http://www.javaeye.com/topic/93391">http://www.javaeye.com/topic/93391</a><span style="font-family: 宋体">。</span></p>
<h4><span style="font-size: 12pt; line-height: 156%">2. </span><span style="font-size: 12pt; line-height: 156%; font-family: 黑体">普通属性（</span><span style="font-size: 12pt; line-height: 156%">property</span><span style="font-size: 12pt; line-height: 156%; font-family: 黑体">）</span></h4>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">开发人员可以打开网址：</span><a href="http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd</a></p>
<p><span style="font-family: 宋体">来查看</span>hibernate3.0<span style="font-family: 宋体">的</span>dtd<span style="font-family: 宋体">信息，可看到</span>property<span style="font-family: 宋体">的定义如下：</span></p>
<pre><span style="font-size: 9pt; font-family: 'Times New Roman'">&lt;!ELEMENT property (meta*,(column|formula)*,type?)&gt;</span></pre>
<pre><span style="font-size: 9pt; font-family: 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!ATTLIST property name CDATA #REQUIRED&gt;</span></pre>
<pre><span style="font-size: 9pt; font-family: 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!ATTLIST property node CDATA #IMPLIED&gt;</span></pre>
<pre><span style="font-size: 9pt; font-family: 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!ATTLIST property access CDATA #IMPLIED&gt;</span></pre>
<pre><span style="font-size: 9pt; font-family: 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!ATTLIST property type CDATA #IMPLIED&gt;</span></pre>
<pre><span style="font-size: 9pt; font-family: 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!ATTLIST property column CDATA #IMPLIED&gt;</span></pre>
<pre><span style="font-size: 9pt; font-family: 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!ATTLIST property length CDATA #IMPLIED&gt;</span></pre>
<pre><span style="font-size: 9pt; font-family: 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!ATTLIST property precision CDATA #IMPLIED&gt;</span></pre>
<pre><span style="font-size: 9pt; font-family: 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!ATTLIST property scale CDATA #IMPLIED&gt;</span></pre>
<pre><span style="font-size: 9pt; font-family: 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!ATTLIST property not-null (true|false) #IMPLIED&gt;</span></pre>
<pre><span style="font-size: 9pt; font-family: 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!ATTLIST property unique (true|false) "false"&gt;</span></pre>
<pre><span style="font-size: 9pt; font-family: 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!ATTLIST property unique-key CDATA #IMPLIED&gt;</span></pre>
<pre><span style="font-size: 9pt; font-family: 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!ATTLIST property index CDATA #IMPLIED&gt;&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;&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; &lt;!-- include the columns spanned by this property in an index --&gt;</span></pre>
<pre><span style="font-size: 9pt; font-family: 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!ATTLIST property update (true|false) #IMPLIED&gt;</span></pre>
<pre><span style="font-size: 9pt; font-family: 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!ATTLIST property insert (true|false) #IMPLIED&gt;</span></pre>
<pre><span style="font-size: 9pt; font-family: 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!ATTLIST property optimistic-lock (true|false) "true"&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- only supported for properties of a class (not component) --&gt;</span></pre>
<pre><span style="font-size: 9pt; font-family: 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!ATTLIST property formula CDATA #IMPLIED&gt;</span></pre>
<pre><span style="font-size: 9pt; font-family: 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!ATTLIST property lazy (true|false) "false"&gt;</span></pre>
<pre><span style="font-size: 9pt; font-family: 'Times New Roman'">&nbsp;&nbsp;&nbsp; &lt;!ATTLIST property generated (never|insert|always) "never"&gt;</span></pre>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">它的各属性中比较常用的有：</span>name<span style="font-family: 宋体">（对应的</span>java<span style="font-family: 宋体">类的属性名称）、</span>column<span style="font-family: 宋体">（对应的表中的字段）、</span>tyope<span style="font-family: 宋体">（属性的类型，</span>eg.java.lang.String<span style="font-family: 宋体">）、</span>not-null<span style="font-family: 宋体">（设置该属性是否为空，为</span>true<span style="font-family: 宋体">时表示非空，默认为</span>false<span style="font-family: 宋体">）和</span>length(<span style="font-family: 宋体">字段的长度限制</span>)<span style="font-family: 宋体">。</span></p>
<p><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Eg1. &lt;property name="accessname" column="accessName" type="java.lang.String" not-null="true" /&gt;</span></p>
<p><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Eg2. &lt;property name="state" column="state" type="java.lang.Byte"&nbsp;not-null="true" /&gt;</span></p>
<p style="text-indent: 21pt"><span style="font-size: 9pt">Eg3. &lt;property name="description" column="description" type="java.lang.String" /&gt;</span></p>
<h4><span style="font-size: 12pt; line-height: 156%">3. </span><span style="font-size: 12pt; line-height: 156%; font-family: 黑体">一对多关系（</span><span style="font-size: 12pt; line-height: 156%">&lt;many-to-one&#8230;/&gt;</span><span style="font-size: 12pt; line-height: 156%; font-family: 黑体">和</span><span style="font-size: 12pt; line-height: 156%">&lt;set&#8230;&gt;&lt;/set&gt;</span><span style="font-size: 12pt; line-height: 156%; font-family: 黑体">）</span></h4>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">一对多关系一般是用在一个表与另一个表存在外键关联的时候，例如用户表的组织</span>id<span style="font-family: 宋体">与组织表存在外键关联，则&#8220;一&#8221;方为组织表，&#8220;多&#8221;方为用户表，因为一个组织可以包含多个用户，而一个用户只能隶属于一个组织。</span></p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">对于存在一对多关系和多对一关系的双方，需要在</span>&#8230;hbm.xml<span style="font-family: 宋体">中进行相应配置，这时在&#8220;一&#8221;方（例如：组织）需要在映射文件中添加</span>&lt;set&#8230;&gt;&lt;/set&gt;<span style="font-family: 宋体">元素，因为它包含多个&#8220;多&#8221;方的对象，一般的格式如下：</span></p>
<p style="text-indent: 21pt; text-align: left" align="left"><span style="font-size: 9pt">&lt;set name="java</span><span style="font-size: 9pt; font-family: 宋体">映射类中对应的属性</span><span style="font-size: 9pt">" inverse="true" lazy="true"&gt;</span></p>
<p style="margin-left: 21pt; text-indent: 21pt; text-align: left" align="left"><span style="font-size: 9pt">&lt;key column="</span><span style="font-size: 9pt; font-family: 宋体">表中对应字段</span><span style="font-size: 9pt">"/&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;one-to-many class="</span><span style="font-size: 9pt; font-family: 宋体">多方的类</span><span style="font-size: 9pt">"/&gt;</span></p>
<p style="text-indent: 21pt"><span style="font-size: 9pt">&lt;/set&gt;</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Eg. </p>
<p style="text-indent: 21pt; text-align: left" align="left"><span style="font-size: 9pt">&lt;set name="userSet" inverse="true" lazy="true"&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;key column="orgId"/&gt;</span></p>
<p style="margin-left: 21pt; text-indent: 21pt; text-align: left" align="left"><span style="font-size: 9pt">&lt;one-to-many class="User"/&gt;</span></p>
<p style="text-indent: 21pt; text-align: left" align="left"><span style="font-size: 9pt">&lt;/set&gt;</span></p>
<p style="text-indent: 21pt; text-align: left" align="left"><span style="font-family: 宋体">&#8220;多&#8221;方（例如：用户）隶属于一个&#8220;一&#8221;方对象，一般的格式如下：</span></p>
<p style="text-indent: 21pt; text-align: left" align="left"><span style="font-size: 9pt">&lt;many-to-one name="java</span><span style="font-size: 9pt; font-family: 宋体">映射类中对应的属性</span><span style="font-size: 9pt">" column="</span><span style="font-size: 9pt; font-family: 宋体">表中对应字段</span><span style="font-size: 9pt">" class="</span><span style="font-size: 9pt; font-family: 宋体">类名</span><span style="font-size: 9pt">" not-null="true" /&gt;</span></p>
<p style="text-indent: 21pt; text-align: left" align="left"><span style="font-size: 9pt">Eg.</span></p>
<p style="text-indent: 21pt; text-align: left" align="left"><span style="font-size: 9pt">&lt;many-to-one name="org" column="orgId" class="Organization" not-null="true" /&gt;</span></p>
<h4><span style="font-size: 12pt; line-height: 156%">4. </span><span style="font-size: 12pt; line-height: 156%; font-family: 黑体">一对一关系（</span><span style="font-size: 12pt; line-height: 156%">&lt;one-to-one&#8230;/&gt;</span><span style="font-size: 12pt; line-height: 156%; font-family: 黑体">）</span></h4>
<p style="text-indent: 21pt; text-align: left" align="left"><span style="font-family: 宋体">一对一关系相对一对多关系来说比较少见，但也在某些情况下要用到，例如有一个用户的基本信息表（</span>USER<span style="font-family: 宋体">）和一个用户的密码表（</span>PASSWD<span style="font-family: 宋体">）就存在一对一的关系。下面来看一下一对一关系在</span>Hibernate<span style="font-family: 宋体">的配置。</span></p>
<p style="text-indent: 21pt; text-align: left" align="left"><span style="font-family: 宋体">其中主表（</span>eg. <span style="font-family: 宋体">用户的基本信息表）的配置如下：</span></p>
<p style="text-indent: 21pt; text-align: left" align="left"><span style="font-size: 9pt">&lt;one-to-one name="</span><span style="font-size: 9pt; font-family: 宋体">主表对象中子表对象的属性名</span><span style="font-size: 9pt">" class="</span><span style="font-size: 9pt; font-family: 宋体">子表对象的类名</span><span style="font-size: 9pt">"&nbsp;cascade="save-update"/&gt;</span></p>
<p style="text-indent: 21pt; text-align: left" align="left">Eg. <span style="font-size: 9pt">&lt;one-to-one name="password" class="com.amigo.dao.pojo.Passwd"&nbsp;cascade="save-update"/&gt;</span></p>
<p style="text-indent: 21pt; text-align: left" align="left"><span style="font-family: 宋体">子表（</span>eg. <span style="font-family: 宋体">用户的密码表）的配置如下：</span></p>
<p style="text-indent: 21pt; text-align: left" align="left"><span style="font-size: 9pt">&lt;one-to-one name="</span><span style="font-size: 9pt; font-family: 宋体">子表对象中主表对象的属性名</span><span style="font-size: 9pt">" class="</span><span style="font-size: 9pt; font-family: 宋体">主表对象的类名</span><span style="font-size: 9pt">" constrained="true" /&gt;</span></p>
<p style="text-indent: 21pt; text-align: left" align="left">Eg. <span style="font-size: 9pt">&lt;one-to-one name="user" class="com.amigo.dao.pojo.User " constrained="true" /&gt;</span></p>
<h4><span style="font-size: 12pt; line-height: 156%">5. </span><span style="font-size: 12pt; line-height: 156%; font-family: 黑体">多对多关系（</span><span style="font-size: 12pt; line-height: 156%">&lt;many-to-many&#8230;/&gt;</span><span style="font-size: 12pt; line-height: 156%; font-family: 黑体">）</span></h4>
<p style="text-indent: 21pt; text-align: left" align="left"><span style="font-family: 宋体">在数据库设计时，一般将多对多关系转换为两个一对多（或多对一）关系，例如在基于角色的权限系统中，用户和角色存在的关系就是典型的多对多关系，即一个用户可以具有多个角色，而一个角色又可以为多个用户所有，一般在设计时，都会加一个用户与角色的关联表，该表与用户表以及角色表都存在外键关联。</span></p>
<p style="text-indent: 21pt; text-align: left" align="left"><span style="font-family: 宋体">在本小节中讲述的是没有分解的多对多关系在</span>Hibernate<span style="font-family: 宋体">中如何配置。设置格式如下：</span></p>
<p style="text-indent: 21pt; text-align: left" align="left"><span style="font-size: 9pt">&lt;set&nbsp;name="java</span><span style="font-size: 9pt; font-family: 宋体">对象的属性名</span><span style="font-size: 9pt">"&nbsp;table="</span><span style="font-size: 9pt; font-family: 宋体">表名</span><span style="font-size: 9pt">"&nbsp;cascade="all"&nbsp;outer-join="false"&gt;&nbsp;&nbsp; </span></p>
<p style="margin-left: 21pt; text-indent: 21pt; text-align: left" align="left"><span style="font-size: 9pt">&lt;key&nbsp;column="</span><span style="font-size: 9pt; font-family: 宋体">表的对应字段</span><span style="font-size: 9pt">"/&gt;&nbsp;&nbsp; </span></p>
<p style="margin-left: 21pt; text-indent: 21pt; text-align: left" align="left"><span style="font-size: 9pt">&lt;many-to-many&nbsp;class="</span><span style="font-size: 9pt; font-family: 宋体">另一个表的对象类</span><span style="font-size: 9pt">"&nbsp;column="</span><span style="font-size: 9pt; font-family: 宋体">另一个表的字段</span><span style="font-size: 9pt">"/&gt;&nbsp;&nbsp; </span></p>
<p style="text-indent: 21pt; text-align: left" align="left"><span style="font-size: 9pt">&lt;/set&gt;&nbsp;&nbsp;</span></p>
<p style="text-indent: 21pt; text-align: left" align="left">Eg. <span style="font-family: 宋体">上述的多对多关系可以表示为：</span></p>
<p style="text-indent: 21pt; text-align: left" align="left"><span style="color: red">t_user</span><span style="color: red; font-family: 宋体">方：</span></p>
<p style="text-indent: 21pt; text-align: left" align="left"><span style="font-size: 9pt">&lt;set&nbsp;name="roleSet"&nbsp;table="t_user"&nbsp;cascade="all"&nbsp;outer-join="false"&gt;&nbsp;&nbsp; </span></p>
<p style="margin-left: 21pt; text-indent: 21pt; text-align: left" align="left"><span style="font-size: 9pt">&lt;key&nbsp;column="roleId"/&gt;&nbsp;&nbsp; </span></p>
<p style="margin-left: 21pt; text-indent: 21pt; text-align: left" align="left"><span style="font-size: 9pt">&lt;many-to-many&nbsp;class="com.amigo.dao.pojo.Role"&nbsp;column="roleId"/&gt;&nbsp;&nbsp; </span></p>
<p style="text-indent: 21pt; text-align: left" align="left"><span style="font-size: 9pt">&lt;/set&gt;&nbsp;&nbsp;</span></p>
<p style="text-indent: 21pt; text-align: left" align="left"><span style="color: red">t_role</span><span style="color: red; font-family: 宋体">方：</span></p>
<p style="text-indent: 21pt; text-align: left" align="left"><span style="font-size: 9pt">&lt;set&nbsp;name="userSet"&nbsp;table="t_role"&nbsp;cascade="all"&nbsp;outer-join="false"&gt;&nbsp;&nbsp; </span></p>
<p style="margin-left: 21pt; text-indent: 21pt; text-align: left" align="left"><span style="font-size: 9pt">&lt;key&nbsp;column="roleId"/&gt;&nbsp;&nbsp; </span></p>
<p style="margin-left: 21pt; text-indent: 21pt; text-align: left" align="left"><span style="font-size: 9pt">&lt;many-to-many&nbsp;class="com.amigo.dao.pojo.User"&nbsp;column="roleId"/&gt;&nbsp;&nbsp; </span></p>
<p style="text-indent: 21pt; text-align: left" align="left"><span style="font-size: 9pt">&lt;/set&gt;</span></p>
<h4><span style="font-size: 12pt; line-height: 156%">6. </span><span style="font-size: 12pt; line-height: 156%; font-family: 黑体">完整实例</span></h4>
<p style="text-indent: 21pt; text-align: left" align="left"><span style="font-family: 宋体">在本小节中举一些</span>.hbm.xml<span style="font-family: 宋体">映射文件的例子，让开发人员对其有一个感性的认识。接下来讲述一个用户表（</span>tbl_user<span style="font-family: 宋体">）、用户与角色关联表（</span>tbl_user_role<span style="font-family: 宋体">）、角色表（</span>tbl_role<span style="font-family: 宋体">）以及组织表（</span>tbl_organization<span style="font-family: 宋体">）的例子。</span></p>
<p style="text-align: left" align="left"><strong><span style="color: red; font-family: 宋体">（</span><span style="color: red">1</span></strong><strong><span style="color: red; font-family: 宋体">）</span><span style="color: red">tbl_user</span></strong></p>
<p style="text-align: left" align="left"><span style="font-size: 9pt">&lt;?xml version="1.0" encoding='UTF-8'?&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 9pt">&lt;!DOCTYPE hibernate-mapping PUBLIC</span></p>
<p style="text-align: left" align="left"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"-//Hibernate/Hibernate Mapping DTD 3.0//EN"</span></p>
<p style="text-align: left" align="left"><span style="font-size: 9pt">&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; "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" &gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 9pt">&lt;hibernate-mapping package="com.amigo.dao.pojo"&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp; &lt;class name="User" table="tbl_user"&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&lt;id name="loginname" column="loginName" type="java.lang.String"&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;generator class="assigned"/&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/id&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 9pt">&nbsp;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="name" column="name" type="java.lang.String"&nbsp;not-null="true" /&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="password" column="password" type="java.lang.String"&nbsp;not-null="true" /&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="mobile" column="mobile" type="java.lang.String" /&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="telephone" column="telephone" type="java.lang.String" /&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="email" column="email" type="java.lang.String" /&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="createtime" column="createTime" type="java.util.Date"&nbsp;not-null="true" /&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="lastlogintime" column="lastLoginTime" type="java.util.Date" /&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="logintimes" column="loginTimes" type="java.lang.Long"&nbsp;not-null="true" /&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="state" column="state" type="java.lang.Byte"&nbsp;not-null="true" /&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="description" column="description" type="java.lang.String" /&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 9pt">&nbsp;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;many-to-one name="organization" column="orgId" class="Organization" not-null="true" /&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;set name="userRoleSet" inverse="true" cascade="all-delete-orphan" lazy="true"&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;key column="loginName"/&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;one-to-many class="UserRole"/&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/set&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 9pt">&lt;/hibernate-mapping&gt;</span></p>
<p style="text-align: left" align="left"><strong><span style="color: red; font-family: 宋体">（</span><span style="color: red">2</span></strong><strong><span style="color: red; font-family: 宋体">）</span><span style="color: red">tbl_organization</span></strong></p>
<p style="text-align: left" align="left"><span style="font-size: 9pt">&lt;?xml version="1.0" encoding='UTF-8'?&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 9pt">&lt;!DOCTYPE hibernate-mapping PUBLIC</span></p>
<p style="text-align: left" align="left"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "-//Hibernate/Hibernate Mapping DTD 3.0//EN"</span></p>
<p style="text-align: left" align="left"><span style="font-size: 9pt">&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; "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" &gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 9pt">&lt;hibernate-mapping package="com.amigo.dao.pojo"&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp; &lt;class name="Organization" table="tbl_organization"&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;id name="orgid" column="orgId" type="java.lang.Long"&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;generator class="native"/&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/id&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 9pt">&nbsp;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="parentorgid" column="parentOrgId" type="java.lang.Long"&nbsp;not-null="true" /&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="orgname" column="orgName" type="java.lang.String"&nbsp;not-null="true" /&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="orgfullname" column="orgFullName" type="java.lang.String" /&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="orglevel" column="orgLevel" type="java.lang.Integer"&nbsp;not-null="true" /&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="state" column="state" type="java.lang.Byte"&nbsp;not-null="true" /&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="description" column="description" type="java.lang.String" /&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="creator" column="creator" type="java.lang.String" /&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="createtime" column="createTime" type="java.util.Date" /&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;set name="userSet" inverse="true" lazy="true"&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;key column="orgId"/&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;one-to-many class="User"/&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/set&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp; &lt;/class&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 9pt">&lt;/hibernate-mapping&gt;</span></p>
<p style="text-align: left" align="left"><strong><span style="color: red; font-family: 宋体">（</span><span style="color: red">3</span></strong><strong><span style="color: red; font-family: 宋体">）</span><span style="color: red">tbl_user_role</span></strong></p>
<p style="text-align: left" align="left"><span style="font-size: 9pt">&lt;?xml version="1.0" encoding='UTF-8'?&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 9pt">&lt;!DOCTYPE hibernate-mapping PUBLIC</span></p>
<p style="text-align: left" align="left"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "-//Hibernate/Hibernate Mapping DTD 3.0//EN"</span></p>
<p style="text-align: left" align="left"><span style="font-size: 9pt">&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; "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" &gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 9pt">&lt;hibernate-mapping package="com.cotel.netvote.dao.model"&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp; &lt;class name="UserRole" table="tbl_user_role"&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;id name="urid" column="urId" type="java.lang.Integer"&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;generator class="native"/&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/id&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;many-to-one name="role" column="roleId" class="Role"&nbsp;not-null="true" /&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;many-to-one name="user" column="loginName" class="User"&nbsp;not-null="true" /&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp; &lt;/class&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 9pt">&lt;/hibernate-mapping&gt;</span></p>
<p style="text-align: left" align="left"><strong><span style="color: red; font-family: 宋体">（</span><span style="color: red">4</span></strong><strong><span style="color: red; font-family: 宋体">）</span><span style="color: red">tbl_ role</span></strong></p>
<p style="text-align: left" align="left"><span style="font-size: 9pt">&lt;?xml version="1.0" encoding='UTF-8'?&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 9pt">&lt;!DOCTYPE hibernate-mapping PUBLIC</span></p>
<p style="text-align: left" align="left"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "-//Hibernate/Hibernate Mapping DTD 3.0//EN"</span></p>
<p style="text-align: left" align="left"><span style="font-size: 9pt">&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; "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" &gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 9pt">&lt;hibernate-mapping package="com.cotel.netvote.dao.model"&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp; &lt;class name="Role" table="tbl_role"&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;id name="roleid" column="roleId" type="java.lang.Integer"&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;generator class="native"/&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/id&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 9pt">&nbsp;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="rolename" column="roleName" type="java.lang.String"&nbsp;not-null="true" /&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="createdate" column="createDate" type="java.util.Date"&nbsp;not-null="true" /&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="description" column="description" type="java.lang.String" /&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 9pt">&nbsp;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;set name="userRoleSet" inverse="true" lazy="true" cascade="all"&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;key column="roleId"/&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;one-to-many class="UserRole"/&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/set&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp; &lt;/class&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 9pt">&lt;/hibernate-mapping&gt;</span></p>
http://www.blogjava.net/amigoxie/archive/2007/12/31/171831.html
<img src ="http://www.blogjava.net/smallfa/aggbug/240720.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/smallfa/" target="_blank">smallfa</a> 2008-11-15 21:17 <a href="http://www.blogjava.net/smallfa/archive/2008/11/15/240720.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>