﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-太阳雨-随笔分类-hibernate相关</title><link>http://www.blogjava.net/sy1214520/category/35374.html</link><description>痛并快乐着</description><language>zh-cn</language><lastBuildDate>Sun, 08 Nov 2009 21:43:16 GMT</lastBuildDate><pubDate>Sun, 08 Nov 2009 21:43:16 GMT</pubDate><ttl>60</ttl><item><title>ORACLE中文排序</title><link>http://www.blogjava.net/sy1214520/archive/2009/08/06/290062.html</link><dc:creator>小虫旺福</dc:creator><author>小虫旺福</author><pubDate>Thu, 06 Aug 2009 03:01:00 GMT</pubDate><guid>http://www.blogjava.net/sy1214520/archive/2009/08/06/290062.html</guid><wfw:comment>http://www.blogjava.net/sy1214520/comments/290062.html</wfw:comment><comments>http://www.blogjava.net/sy1214520/archive/2009/08/06/290062.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sy1214520/comments/commentRss/290062.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sy1214520/services/trackbacks/290062.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.blogjava.net/sy1214520/archive/2009/08/06/290062.html'>阅读全文</a><img src ="http://www.blogjava.net/sy1214520/aggbug/290062.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sy1214520/" target="_blank">小虫旺福</a> 2009-08-06 11:01 <a href="http://www.blogjava.net/sy1214520/archive/2009/08/06/290062.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JPA和hibernate对删除操作的不同</title><link>http://www.blogjava.net/sy1214520/archive/2008/11/10/239756.html</link><dc:creator>小虫旺福</dc:creator><author>小虫旺福</author><pubDate>Mon, 10 Nov 2008 15:24:00 GMT</pubDate><guid>http://www.blogjava.net/sy1214520/archive/2008/11/10/239756.html</guid><wfw:comment>http://www.blogjava.net/sy1214520/comments/239756.html</wfw:comment><comments>http://www.blogjava.net/sy1214520/archive/2008/11/10/239756.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sy1214520/comments/commentRss/239756.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sy1214520/services/trackbacks/239756.html</trackback:ping><description><![CDATA[<div class="postTitle">在hibernate里面调用session的delete方法以后，无论这个被删除的对象有没有被人外键引用到，都可以被删除，并且此时的外键设为null，也就是说他会自动帮我们去查看他被谁引用到了。然后把引用全部去掉后，再把自己删掉。而在JPA里面，如果调用EntityManager.remove方法时，传进去的对象，有被外键引用到，则会失败。因为JPA里面的实现就是直接执行delete语句，也不管他有没有被外键引用，此时，当然会出错了。<br />
<br />
测试时候使用的两个类分别如下：<br />
<br />
举的例子是部门和员工的关系。一个部门可以有多个员工。然后把部门删掉的时候，员工的部门属性就为null了，不过，按照严谨来说，还是JPA的严谨一些。这样可以防止误操作，呵呵。<br />
<br />
<br />
部门的实体对象<br />
<div style="border-right: rgb(204,204,204) 1px solid; padding-right: 5px; border-top: rgb(204,204,204) 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: rgb(204,204,204) 1px solid; width: 98%; padding-top: 4px; border-bottom: rgb(204,204,204) 1px solid; background-color: rgb(238,238,238)"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: rgb(0,128,0)">/*</span><span style="color: rgb(0,128,0)"><br />
&nbsp;*&nbsp;To&nbsp;change&nbsp;this&nbsp;template,&nbsp;choose&nbsp;Tools&nbsp;|&nbsp;Templates<br />
&nbsp;*&nbsp;and&nbsp;open&nbsp;the&nbsp;template&nbsp;in&nbsp;the&nbsp;editor.<br />
&nbsp;</span><span style="color: rgb(0,128,0)">*/</span><span style="color: rgb(0,0,0)"><br />
</span><span style="color: rgb(0,0,255)">package</span><span style="color: rgb(0,0,0)">&nbsp;com.hadeslee.jpaentity;<br />
<br />
</span><span style="color: rgb(0,0,255)">import</span><span style="color: rgb(0,0,0)">&nbsp;java.io.Serializable;<br />
</span><span style="color: rgb(0,0,255)">import</span><span style="color: rgb(0,0,0)">&nbsp;java.util.HashSet;<br />
</span><span style="color: rgb(0,0,255)">import</span><span style="color: rgb(0,0,0)">&nbsp;java.util.Set;<br />
</span><span style="color: rgb(0,0,255)">import</span><span style="color: rgb(0,0,0)">&nbsp;javax.persistence.Entity;<br />
</span><span style="color: rgb(0,0,255)">import</span><span style="color: rgb(0,0,0)">&nbsp;javax.persistence.GeneratedValue;<br />
</span><span style="color: rgb(0,0,255)">import</span><span style="color: rgb(0,0,0)">&nbsp;javax.persistence.GenerationType;<br />
</span><span style="color: rgb(0,0,255)">import</span><span style="color: rgb(0,0,0)">&nbsp;javax.persistence.Id;<br />
</span><span style="color: rgb(0,0,255)">import</span><span style="color: rgb(0,0,0)">&nbsp;javax.persistence.OneToMany;<br />
</span><span style="color: rgb(0,0,255)">import</span><span style="color: rgb(0,0,0)">&nbsp;javax.persistence.Table;<br />
<br />
</span><span style="color: rgb(0,128,0)">/**</span><span style="color: rgb(0,128,0)"><br />
&nbsp;*<br />
&nbsp;*&nbsp;</span><span style="color: rgb(128,128,128)">@author</span><span style="color: rgb(0,128,0)">&nbsp;hadeslee<br />
&nbsp;</span><span style="color: rgb(0,128,0)">*/</span><span style="color: rgb(0,0,0)"><br />
@Entity<br />
@Table(name&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)">JPADepartment</span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)">)<br />
</span><span style="color: rgb(0,0,255)">public</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,255)">class</span><span style="color: rgb(0,0,0)">&nbsp;Department&nbsp;</span><span style="color: rgb(0,0,255)">implements</span><span style="color: rgb(0,0,0)">&nbsp;Serializable&nbsp;{<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">private</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,255)">static</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,255)">final</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,255)">long</span><span style="color: rgb(0,0,0)">&nbsp;serialVersionUID&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,0)">1L</span><span style="color: rgb(0,0,0)">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;@Id<br />
&nbsp;&nbsp;&nbsp;&nbsp;@GeneratedValue(strategy&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;GenerationType.AUTO)<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">private</span><span style="color: rgb(0,0,0)">&nbsp;Long&nbsp;id;<br />
&nbsp;&nbsp;&nbsp;&nbsp;@OneToMany(mappedBy&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)">department</span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">private</span><span style="color: rgb(0,0,0)">&nbsp;Set</span><span style="color: rgb(0,0,0)">&lt;</span><span style="color: rgb(0,0,0)">Person</span><span style="color: rgb(0,0,0)">&gt;</span><span style="color: rgb(0,0,0)">&nbsp;persons&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,255)">new</span><span style="color: rgb(0,0,0)">&nbsp;HashSet</span><span style="color: rgb(0,0,0)">&lt;</span><span style="color: rgb(0,0,0)">Person</span><span style="color: rgb(0,0,0)">&gt;</span><span style="color: rgb(0,0,0)">();<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">private</span><span style="color: rgb(0,0,0)">&nbsp;String&nbsp;deptName;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">private</span><span style="color: rgb(0,0,0)">&nbsp;String&nbsp;description;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">public</span><span style="color: rgb(0,0,0)">&nbsp;String&nbsp;getDeptName()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">return</span><span style="color: rgb(0,0,0)">&nbsp;deptName;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">public</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,255)">void</span><span style="color: rgb(0,0,0)">&nbsp;setDeptName(String&nbsp;deptName)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">this</span><span style="color: rgb(0,0,0)">.deptName&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;deptName;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">public</span><span style="color: rgb(0,0,0)">&nbsp;String&nbsp;getDescription()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">return</span><span style="color: rgb(0,0,0)">&nbsp;description;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">public</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,255)">void</span><span style="color: rgb(0,0,0)">&nbsp;setDescription(String&nbsp;description)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">this</span><span style="color: rgb(0,0,0)">.description&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;description;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">public</span><span style="color: rgb(0,0,0)">&nbsp;Set</span><span style="color: rgb(0,0,0)">&lt;</span><span style="color: rgb(0,0,0)">Person</span><span style="color: rgb(0,0,0)">&gt;</span><span style="color: rgb(0,0,0)">&nbsp;getPersons()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">return</span><span style="color: rgb(0,0,0)">&nbsp;persons;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">public</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,255)">void</span><span style="color: rgb(0,0,0)">&nbsp;setPersons(Set</span><span style="color: rgb(0,0,0)">&lt;</span><span style="color: rgb(0,0,0)">Person</span><span style="color: rgb(0,0,0)">&gt;</span><span style="color: rgb(0,0,0)">&nbsp;persons)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">this</span><span style="color: rgb(0,0,0)">.persons&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;persons;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">public</span><span style="color: rgb(0,0,0)">&nbsp;Long&nbsp;getId()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">return</span><span style="color: rgb(0,0,0)">&nbsp;id;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">public</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,255)">void</span><span style="color: rgb(0,0,0)">&nbsp;setId(Long&nbsp;id)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">this</span><span style="color: rgb(0,0,0)">.id&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;id;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">public</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,255)">int</span><span style="color: rgb(0,0,0)">&nbsp;hashCode()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">int</span><span style="color: rgb(0,0,0)">&nbsp;hash&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,0)">0</span><span style="color: rgb(0,0,0)">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hash&nbsp;</span><span style="color: rgb(0,0,0)">+=</span><span style="color: rgb(0,0,0)">&nbsp;(id&nbsp;</span><span style="color: rgb(0,0,0)">!=</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,255)">null</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,0)">?</span><span style="color: rgb(0,0,0)">&nbsp;id.hashCode()&nbsp;:&nbsp;</span><span style="color: rgb(0,0,0)">0</span><span style="color: rgb(0,0,0)">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">return</span><span style="color: rgb(0,0,0)">&nbsp;hash;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">public</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,255)">boolean</span><span style="color: rgb(0,0,0)">&nbsp;equals(Object&nbsp;object)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,128,0)">//</span><span style="color: rgb(0,128,0)">&nbsp;TODO:&nbsp;Warning&nbsp;-&nbsp;this&nbsp;method&nbsp;won't&nbsp;work&nbsp;in&nbsp;the&nbsp;case&nbsp;the&nbsp;id&nbsp;fields&nbsp;are&nbsp;not&nbsp;set</span><span style="color: rgb(0,128,0)"><br />
</span><span style="color: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">if</span><span style="color: rgb(0,0,0)">&nbsp;(</span><span style="color: rgb(0,0,0)">!</span><span style="color: rgb(0,0,0)">(object&nbsp;</span><span style="color: rgb(0,0,255)">instanceof</span><span style="color: rgb(0,0,0)">&nbsp;Department))&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">return</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,255)">false</span><span style="color: rgb(0,0,0)">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Department&nbsp;other&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;(Department)&nbsp;object;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">if</span><span style="color: rgb(0,0,0)">&nbsp;((</span><span style="color: rgb(0,0,255)">this</span><span style="color: rgb(0,0,0)">.id&nbsp;</span><span style="color: rgb(0,0,0)">==</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,255)">null</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,0)">&amp;&amp;</span><span style="color: rgb(0,0,0)">&nbsp;other.id&nbsp;</span><span style="color: rgb(0,0,0)">!=</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,255)">null</span><span style="color: rgb(0,0,0)">)&nbsp;</span><span style="color: rgb(0,0,0)">||</span><span style="color: rgb(0,0,0)">&nbsp;(</span><span style="color: rgb(0,0,255)">this</span><span style="color: rgb(0,0,0)">.id&nbsp;</span><span style="color: rgb(0,0,0)">!=</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,255)">null</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,0)">&amp;&amp;</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,0)">!</span><span style="color: rgb(0,0,255)">this</span><span style="color: rgb(0,0,0)">.id.equals(other.id)))&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">return</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,255)">false</span><span style="color: rgb(0,0,0)">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">return</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,255)">true</span><span style="color: rgb(0,0,0)">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">public</span><span style="color: rgb(0,0,0)">&nbsp;String&nbsp;toString()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">return</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)">com.hadeslee.jpaentity.Department[id=</span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,0)">+</span><span style="color: rgb(0,0,0)">&nbsp;id&nbsp;</span><span style="color: rgb(0,0,0)">+</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)">]</span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
</span></div>
<br />
人员的实体对象<br />
<br />
<div style="border-right: rgb(204,204,204) 1px solid; padding-right: 5px; border-top: rgb(204,204,204) 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: rgb(204,204,204) 1px solid; width: 98%; padding-top: 4px; border-bottom: rgb(204,204,204) 1px solid; background-color: rgb(238,238,238)"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: rgb(0,128,0)">/*</span><span style="color: rgb(0,128,0)"><br />
&nbsp;*&nbsp;To&nbsp;change&nbsp;this&nbsp;template,&nbsp;choose&nbsp;Tools&nbsp;|&nbsp;Templates<br />
&nbsp;*&nbsp;and&nbsp;open&nbsp;the&nbsp;template&nbsp;in&nbsp;the&nbsp;editor.<br />
&nbsp;</span><span style="color: rgb(0,128,0)">*/</span><span style="color: rgb(0,0,0)"><br />
</span><span style="color: rgb(0,0,255)">package</span><span style="color: rgb(0,0,0)">&nbsp;com.hadeslee.jpaentity;<br />
<br />
</span><span style="color: rgb(0,0,255)">import</span><span style="color: rgb(0,0,0)">&nbsp;java.io.Serializable;<br />
</span><span style="color: rgb(0,0,255)">import</span><span style="color: rgb(0,0,0)">&nbsp;javax.persistence.Entity;<br />
</span><span style="color: rgb(0,0,255)">import</span><span style="color: rgb(0,0,0)">&nbsp;javax.persistence.GeneratedValue;<br />
</span><span style="color: rgb(0,0,255)">import</span><span style="color: rgb(0,0,0)">&nbsp;javax.persistence.GenerationType;<br />
</span><span style="color: rgb(0,0,255)">import</span><span style="color: rgb(0,0,0)">&nbsp;javax.persistence.Id;<br />
</span><span style="color: rgb(0,0,255)">import</span><span style="color: rgb(0,0,0)">&nbsp;javax.persistence.ManyToOne;<br />
</span><span style="color: rgb(0,0,255)">import</span><span style="color: rgb(0,0,0)">&nbsp;javax.persistence.Table;<br />
<br />
</span><span style="color: rgb(0,128,0)">/**</span><span style="color: rgb(0,128,0)"><br />
&nbsp;*<br />
&nbsp;*&nbsp;</span><span style="color: rgb(128,128,128)">@author</span><span style="color: rgb(0,128,0)">&nbsp;hadeslee<br />
&nbsp;</span><span style="color: rgb(0,128,0)">*/</span><span style="color: rgb(0,0,0)"><br />
@Entity<br />
@Table(name&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)">JPAPerson</span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)">)<br />
</span><span style="color: rgb(0,0,255)">public</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,255)">class</span><span style="color: rgb(0,0,0)">&nbsp;Person&nbsp;</span><span style="color: rgb(0,0,255)">implements</span><span style="color: rgb(0,0,0)">&nbsp;Serializable&nbsp;{<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">private</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,255)">static</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,255)">final</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,255)">long</span><span style="color: rgb(0,0,0)">&nbsp;serialVersionUID&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,0)">1L</span><span style="color: rgb(0,0,0)">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;@Id<br />
&nbsp;&nbsp;&nbsp;&nbsp;@GeneratedValue(strategy&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;GenerationType.AUTO)<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">private</span><span style="color: rgb(0,0,0)">&nbsp;Integer&nbsp;id;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">private</span><span style="color: rgb(0,0,0)">&nbsp;String&nbsp;name;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">private</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,255)">int</span><span style="color: rgb(0,0,0)">&nbsp;age;<br />
&nbsp;&nbsp;&nbsp;&nbsp;@ManyToOne<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">private</span><span style="color: rgb(0,0,0)">&nbsp;Department&nbsp;department;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">public</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,255)">int</span><span style="color: rgb(0,0,0)">&nbsp;getAge()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">return</span><span style="color: rgb(0,0,0)">&nbsp;age;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">public</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,255)">void</span><span style="color: rgb(0,0,0)">&nbsp;setAge(</span><span style="color: rgb(0,0,255)">int</span><span style="color: rgb(0,0,0)">&nbsp;age)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">this</span><span style="color: rgb(0,0,0)">.age&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;age;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">public</span><span style="color: rgb(0,0,0)">&nbsp;Department&nbsp;getDepartment()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">return</span><span style="color: rgb(0,0,0)">&nbsp;department;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">public</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,255)">void</span><span style="color: rgb(0,0,0)">&nbsp;setDepartment(Department&nbsp;department)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">this</span><span style="color: rgb(0,0,0)">.department&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;department;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">public</span><span style="color: rgb(0,0,0)">&nbsp;String&nbsp;getName()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">return</span><span style="color: rgb(0,0,0)">&nbsp;name;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">public</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,255)">void</span><span style="color: rgb(0,0,0)">&nbsp;setName(String&nbsp;name)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">this</span><span style="color: rgb(0,0,0)">.name&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;name;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">public</span><span style="color: rgb(0,0,0)">&nbsp;Integer&nbsp;getId()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">return</span><span style="color: rgb(0,0,0)">&nbsp;id;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">public</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,255)">void</span><span style="color: rgb(0,0,0)">&nbsp;setId(Integer&nbsp;id)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">this</span><span style="color: rgb(0,0,0)">.id&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;id;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">public</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,255)">int</span><span style="color: rgb(0,0,0)">&nbsp;hashCode()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">int</span><span style="color: rgb(0,0,0)">&nbsp;hash&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,0)">0</span><span style="color: rgb(0,0,0)">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hash&nbsp;</span><span style="color: rgb(0,0,0)">+=</span><span style="color: rgb(0,0,0)">&nbsp;(id&nbsp;</span><span style="color: rgb(0,0,0)">!=</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,255)">null</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,0)">?</span><span style="color: rgb(0,0,0)">&nbsp;id.hashCode()&nbsp;:&nbsp;</span><span style="color: rgb(0,0,0)">0</span><span style="color: rgb(0,0,0)">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">return</span><span style="color: rgb(0,0,0)">&nbsp;hash;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">public</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,255)">boolean</span><span style="color: rgb(0,0,0)">&nbsp;equals(Object&nbsp;object)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,128,0)">//</span><span style="color: rgb(0,128,0)">&nbsp;TODO:&nbsp;Warning&nbsp;-&nbsp;this&nbsp;method&nbsp;won't&nbsp;work&nbsp;in&nbsp;the&nbsp;case&nbsp;the&nbsp;id&nbsp;fields&nbsp;are&nbsp;not&nbsp;set</span><span style="color: rgb(0,128,0)"><br />
</span><span style="color: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">if</span><span style="color: rgb(0,0,0)">&nbsp;(</span><span style="color: rgb(0,0,0)">!</span><span style="color: rgb(0,0,0)">(object&nbsp;</span><span style="color: rgb(0,0,255)">instanceof</span><span style="color: rgb(0,0,0)">&nbsp;Person))&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">return</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,255)">false</span><span style="color: rgb(0,0,0)">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Person&nbsp;other&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;(Person)&nbsp;object;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">if</span><span style="color: rgb(0,0,0)">&nbsp;((</span><span style="color: rgb(0,0,255)">this</span><span style="color: rgb(0,0,0)">.id&nbsp;</span><span style="color: rgb(0,0,0)">==</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,255)">null</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,0)">&amp;&amp;</span><span style="color: rgb(0,0,0)">&nbsp;other.id&nbsp;</span><span style="color: rgb(0,0,0)">!=</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,255)">null</span><span style="color: rgb(0,0,0)">)&nbsp;</span><span style="color: rgb(0,0,0)">||</span><span style="color: rgb(0,0,0)">&nbsp;(</span><span style="color: rgb(0,0,255)">this</span><span style="color: rgb(0,0,0)">.id&nbsp;</span><span style="color: rgb(0,0,0)">!=</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,255)">null</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,0)">&amp;&amp;</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,0)">!</span><span style="color: rgb(0,0,255)">this</span><span style="color: rgb(0,0,0)">.id.equals(other.id)))&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">return</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,255)">false</span><span style="color: rgb(0,0,0)">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">return</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,255)">true</span><span style="color: rgb(0,0,0)">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">public</span><span style="color: rgb(0,0,0)">&nbsp;String&nbsp;toString()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">return</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)">com.hadeslee.jpaentity.Person[id=</span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,0)">+</span><span style="color: rgb(0,0,0)">&nbsp;id&nbsp;</span><span style="color: rgb(0,0,0)">+</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)">]</span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
</span></div>
<br />
<br />
由于JPA是不需要配置的，代码里面已经包括了注释，所以下面附上Hibernate的映射文件，为了使数据库里面更清楚一些，所以两者使用的表不是同一张表，JPA的表是带JPA前缀的，用@Table这个注释声明了这一点。<br />
<br />
<div style="border-right: rgb(204,204,204) 1px solid; padding-right: 5px; border-top: rgb(204,204,204) 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: rgb(204,204,204) 1px solid; width: 98%; padding-top: 4px; border-bottom: rgb(204,204,204) 1px solid; background-color: rgb(238,238,238)"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: rgb(0,0,255)">&lt;?</span><span style="color: rgb(255,0,255)">xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"</span><span style="color: rgb(0,0,255)">?&gt;</span><span style="color: rgb(0,0,0)"><br />
<br />
</span><span style="color: rgb(0,0,255)">&lt;!</span><span style="color: rgb(255,0,255)">DOCTYPE&nbsp;hibernate-mapping&nbsp;PUBLIC<br />
&nbsp;&nbsp;"-//Hibernate/Hibernate&nbsp;Mapping&nbsp;DTD&nbsp;3.0//EN"<br />
&nbsp;&nbsp;"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"</span><span style="color: rgb(0,0,255)">&gt;</span><span style="color: rgb(0,0,0)"><br />
</span><span style="color: rgb(0,0,255)">&lt;</span><span style="color: rgb(128,0,0)">hibernate-mapping&nbsp;</span><span style="color: rgb(255,0,0)">package</span><span style="color: rgb(0,0,255)">="com.hadeslee.jpaentity"</span><span style="color: rgb(0,0,255)">&gt;</span><span style="color: rgb(0,0,0)"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">&lt;</span><span style="color: rgb(128,0,0)">class&nbsp;</span><span style="color: rgb(255,0,0)">name</span><span style="color: rgb(0,0,255)">="Department"</span><span style="color: rgb(255,0,0)">&nbsp;table</span><span style="color: rgb(0,0,255)">="Department"</span><span style="color: rgb(0,0,255)">&gt;</span><span style="color: rgb(0,0,0)"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">&lt;</span><span style="color: rgb(128,0,0)">id&nbsp;</span><span style="color: rgb(255,0,0)">name</span><span style="color: rgb(0,0,255)">="id"</span><span style="color: rgb(255,0,0)">&nbsp;column</span><span style="color: rgb(0,0,255)">="departId"</span><span style="color: rgb(255,0,0)">&nbsp;type</span><span style="color: rgb(0,0,255)">="long"</span><span style="color: rgb(0,0,255)">&gt;</span><span style="color: rgb(0,0,0)"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">&lt;</span><span style="color: rgb(128,0,0)">generator&nbsp;</span><span style="color: rgb(255,0,0)">class</span><span style="color: rgb(0,0,255)">="native"</span><span style="color: rgb(0,0,255)">/&gt;</span><span style="color: rgb(0,0,0)"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">&lt;/</span><span style="color: rgb(128,0,0)">id</span><span style="color: rgb(0,0,255)">&gt;</span><span style="color: rgb(0,0,0)"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">&lt;</span><span style="color: rgb(128,0,0)">property&nbsp;</span><span style="color: rgb(255,0,0)">name</span><span style="color: rgb(0,0,255)">="deptName"</span><span style="color: rgb(0,0,255)">/&gt;</span><span style="color: rgb(0,0,0)"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">&lt;</span><span style="color: rgb(128,0,0)">property&nbsp;</span><span style="color: rgb(255,0,0)">name</span><span style="color: rgb(0,0,255)">="description"</span><span style="color: rgb(0,0,255)">/&gt;</span><span style="color: rgb(0,0,0)"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">&lt;</span><span style="color: rgb(128,0,0)">set&nbsp;</span><span style="color: rgb(255,0,0)">name</span><span style="color: rgb(0,0,255)">="persons"</span><span style="color: rgb(0,0,255)">&gt;</span><span style="color: rgb(0,0,0)"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">&lt;</span><span style="color: rgb(128,0,0)">key&nbsp;</span><span style="color: rgb(255,0,0)">column</span><span style="color: rgb(0,0,255)">="deptId"</span><span style="color: rgb(0,0,255)">/&gt;</span><span style="color: rgb(0,0,0)"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">&lt;</span><span style="color: rgb(128,0,0)">one-to-many&nbsp;</span><span style="color: rgb(255,0,0)">class</span><span style="color: rgb(0,0,255)">="Person"</span><span style="color: rgb(0,0,255)">/&gt;</span><span style="color: rgb(0,0,0)"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">&lt;/</span><span style="color: rgb(128,0,0)">set</span><span style="color: rgb(0,0,255)">&gt;</span><span style="color: rgb(0,0,0)"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">&lt;/</span><span style="color: rgb(128,0,0)">class</span><span style="color: rgb(0,0,255)">&gt;</span><span style="color: rgb(0,0,0)"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">&lt;</span><span style="color: rgb(128,0,0)">class&nbsp;</span><span style="color: rgb(255,0,0)">name</span><span style="color: rgb(0,0,255)">="Person"</span><span style="color: rgb(255,0,0)">&nbsp;table</span><span style="color: rgb(0,0,255)">="Person"</span><span style="color: rgb(0,0,255)">&gt;</span><span style="color: rgb(0,0,0)"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">&lt;</span><span style="color: rgb(128,0,0)">id&nbsp;</span><span style="color: rgb(255,0,0)">name</span><span style="color: rgb(0,0,255)">="id"</span><span style="color: rgb(255,0,0)">&nbsp;column</span><span style="color: rgb(0,0,255)">="personId"</span><span style="color: rgb(255,0,0)">&nbsp;type</span><span style="color: rgb(0,0,255)">="long"</span><span style="color: rgb(0,0,255)">&gt;</span><span style="color: rgb(0,0,0)"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">&lt;</span><span style="color: rgb(128,0,0)">generator&nbsp;</span><span style="color: rgb(255,0,0)">class</span><span style="color: rgb(0,0,255)">="native"</span><span style="color: rgb(0,0,255)">/&gt;</span><span style="color: rgb(0,0,0)"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">&lt;/</span><span style="color: rgb(128,0,0)">id</span><span style="color: rgb(0,0,255)">&gt;</span><span style="color: rgb(0,0,0)"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">&lt;</span><span style="color: rgb(128,0,0)">property&nbsp;</span><span style="color: rgb(255,0,0)">name</span><span style="color: rgb(0,0,255)">="name"</span><span style="color: rgb(0,0,255)">/&gt;</span><span style="color: rgb(0,0,0)"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">&lt;</span><span style="color: rgb(128,0,0)">property&nbsp;</span><span style="color: rgb(255,0,0)">name</span><span style="color: rgb(0,0,255)">="age"</span><span style="color: rgb(0,0,255)">/&gt;</span><span style="color: rgb(0,0,0)"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">&lt;</span><span style="color: rgb(128,0,0)">many-to-one&nbsp;</span><span style="color: rgb(255,0,0)">name</span><span style="color: rgb(0,0,255)">="department"</span><span style="color: rgb(255,0,0)">&nbsp;column</span><span style="color: rgb(0,0,255)">="deptId"</span><span style="color: rgb(255,0,0)">&nbsp;class</span><span style="color: rgb(0,0,255)">="Department"</span><span style="color: rgb(0,0,255)">/&gt;</span><span style="color: rgb(0,0,0)"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">&lt;/</span><span style="color: rgb(128,0,0)">class</span><span style="color: rgb(0,0,255)">&gt;</span><span style="color: rgb(0,0,0)"><br />
</span><span style="color: rgb(0,0,255)">&lt;/</span><span style="color: rgb(128,0,0)">hibernate-mapping</span><span style="color: rgb(0,0,255)">&gt;</span></div>
<br />
调用JPA的代码如下：<br />
<br />
<div style="border-right: rgb(204,204,204) 1px solid; padding-right: 5px; border-top: rgb(204,204,204) 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: rgb(204,204,204) 1px solid; width: 98%; padding-top: 4px; border-bottom: rgb(204,204,204) 1px solid; background-color: rgb(238,238,238)"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: rgb(0,0,0)">&nbsp;EntityManagerFactory&nbsp;emf&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;Persistence.createEntityManagerFactory(</span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)">TestSSH1PU2</span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EntityManager&nbsp;em&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;emf.createEntityManager();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;em.getTransaction().begin();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;com.hadeslee.jpaentity.Person&nbsp;p&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,255)">new</span><span style="color: rgb(0,0,0)">&nbsp;com.hadeslee.jpaentity.Person();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p.setAge(</span><span style="color: rgb(0,0,0)">26</span><span style="color: rgb(0,0,0)">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p.setName(</span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)">千里冰封</span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)">);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;com.hadeslee.jpaentity.Department&nbsp;dept&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;em.find(com.hadeslee.jpaentity.Department.</span><span style="color: rgb(0,0,255)">class</span><span style="color: rgb(0,0,0)">,&nbsp;Long.valueOf(</span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)">3</span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)">));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)">找到的dept=</span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,0)">+</span><span style="color: rgb(0,0,0)">&nbsp;dept);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;em.remove(dept);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;em.getTransaction().commit();</span></div>
<br />
调用hibernate的代码如下：<br />
<br />
<div style="border-right: rgb(204,204,204) 1px solid; padding-right: 5px; border-top: rgb(204,204,204) 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: rgb(204,204,204) 1px solid; width: 98%; padding-top: 4px; border-bottom: rgb(204,204,204) 1px solid; background-color: rgb(238,238,238)"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: rgb(0,0,0)">Session&nbsp;session&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;HibernateUtil.getSessionFactory().getCurrentSession();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session.getTransaction().begin();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Department&nbsp;dept&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;(Department)&nbsp;session.load(Department.</span><span style="color: rgb(0,0,255)">class</span><span style="color: rgb(0,0,0)">,&nbsp;</span><span style="color: rgb(0,0,0)">2</span><span style="color: rgb(0,0,0)">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session.delete(dept);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session.getTransaction().commit();</span></div>
<br />
最后发现是JPA是不能删除的，而hibernate这边的调用可以删除，一开始我还以为是toplink的实现问题，后来特意把实现改成hibernate的实现，也同样。所以有可能是JPA的要求必须得这样做，不能替我们自动完成一些东西，是利于安全。这可能就是标准和流行的差别吧。呵呵。</div>
<img src ="http://www.blogjava.net/sy1214520/aggbug/239756.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sy1214520/" target="_blank">小虫旺福</a> 2008-11-10 23:24 <a href="http://www.blogjava.net/sy1214520/archive/2008/11/10/239756.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Hibernate常见异常总结（不断补充） </title><link>http://www.blogjava.net/sy1214520/archive/2008/10/21/235667.html</link><dc:creator>小虫旺福</dc:creator><author>小虫旺福</author><pubDate>Tue, 21 Oct 2008 06:29:00 GMT</pubDate><guid>http://www.blogjava.net/sy1214520/archive/2008/10/21/235667.html</guid><wfw:comment>http://www.blogjava.net/sy1214520/comments/235667.html</wfw:comment><comments>http://www.blogjava.net/sy1214520/archive/2008/10/21/235667.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sy1214520/comments/commentRss/235667.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sy1214520/services/trackbacks/235667.html</trackback:ping><description><![CDATA[<span style="font-family: 宋体">本文总结</span>Hibernate<span style="font-family: 宋体">中常见的异常。</span>
<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>
<img src ="http://www.blogjava.net/sy1214520/aggbug/235667.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sy1214520/" target="_blank">小虫旺福</a> 2008-10-21 14:29 <a href="http://www.blogjava.net/sy1214520/archive/2008/10/21/235667.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Hibernate使用举例</title><link>http://www.blogjava.net/sy1214520/archive/2008/10/21/235666.html</link><dc:creator>小虫旺福</dc:creator><author>小虫旺福</author><pubDate>Tue, 21 Oct 2008 06:29:00 GMT</pubDate><guid>http://www.blogjava.net/sy1214520/archive/2008/10/21/235666.html</guid><wfw:comment>http://www.blogjava.net/sy1214520/comments/235666.html</wfw:comment><comments>http://www.blogjava.net/sy1214520/archive/2008/10/21/235666.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sy1214520/comments/commentRss/235666.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sy1214520/services/trackbacks/235666.html</trackback:ping><description><![CDATA[<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>
<img src ="http://www.blogjava.net/sy1214520/aggbug/235666.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sy1214520/" target="_blank">小虫旺福</a> 2008-10-21 14:29 <a href="http://www.blogjava.net/sy1214520/archive/2008/10/21/235666.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hibernate.cfg.xml配置</title><link>http://www.blogjava.net/sy1214520/archive/2008/10/21/235664.html</link><dc:creator>小虫旺福</dc:creator><author>小虫旺福</author><pubDate>Tue, 21 Oct 2008 06:27:00 GMT</pubDate><guid>http://www.blogjava.net/sy1214520/archive/2008/10/21/235664.html</guid><wfw:comment>http://www.blogjava.net/sy1214520/comments/235664.html</wfw:comment><comments>http://www.blogjava.net/sy1214520/archive/2008/10/21/235664.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sy1214520/comments/commentRss/235664.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sy1214520/services/trackbacks/235664.html</trackback:ping><description><![CDATA[&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>&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>
<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> 
<img src ="http://www.blogjava.net/sy1214520/aggbug/235664.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sy1214520/" target="_blank">小虫旺福</a> 2008-10-21 14:27 <a href="http://www.blogjava.net/sy1214520/archive/2008/10/21/235664.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Hibernate3.x调用存储过程</title><link>http://www.blogjava.net/sy1214520/archive/2008/10/21/235663.html</link><dc:creator>小虫旺福</dc:creator><author>小虫旺福</author><pubDate>Tue, 21 Oct 2008 06:27:00 GMT</pubDate><guid>http://www.blogjava.net/sy1214520/archive/2008/10/21/235663.html</guid><wfw:comment>http://www.blogjava.net/sy1214520/comments/235663.html</wfw:comment><comments>http://www.blogjava.net/sy1214520/archive/2008/10/21/235663.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sy1214520/comments/commentRss/235663.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sy1214520/services/trackbacks/235663.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 摘要：本文以详尽的实例展示了hibernate3.x中调用存储过程各步骤，从建立测试表、存储过程的建立、工程的建立以及类的编写和测试一步一步引导用户学习hibernate3.x中调用存储过程的方法.如果底层数据库（eg. Oracle、mysql、sqlserver）等支持存储过程，可通过存储过程执行批量删除、更新等操作。本文以实例说明在hibernate3.x中如何调用存储过程。&nbs...&nbsp;&nbsp;<a href='http://www.blogjava.net/sy1214520/archive/2008/10/21/235663.html'>阅读全文</a><img src ="http://www.blogjava.net/sy1214520/aggbug/235663.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sy1214520/" target="_blank">小虫旺福</a> 2008-10-21 14:27 <a href="http://www.blogjava.net/sy1214520/archive/2008/10/21/235663.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hibernat配置文件中set元素中各属性的定义</title><link>http://www.blogjava.net/sy1214520/archive/2008/10/21/235662.html</link><dc:creator>小虫旺福</dc:creator><author>小虫旺福</author><pubDate>Tue, 21 Oct 2008 06:26:00 GMT</pubDate><guid>http://www.blogjava.net/sy1214520/archive/2008/10/21/235662.html</guid><wfw:comment>http://www.blogjava.net/sy1214520/comments/235662.html</wfw:comment><comments>http://www.blogjava.net/sy1214520/archive/2008/10/21/235662.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sy1214520/comments/commentRss/235662.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sy1214520/services/trackbacks/235662.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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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; &nbsp; (5) &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cascade="all|none|save-update|delete|all-delete-orphan" &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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;&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;&nbsp;&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;&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;&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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/sy1214520/aggbug/235662.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sy1214520/" target="_blank">小虫旺福</a> 2008-10-21 14:26 <a href="http://www.blogjava.net/sy1214520/archive/2008/10/21/235662.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Hibernate的核心接口学习 </title><link>http://www.blogjava.net/sy1214520/archive/2008/10/21/235661.html</link><dc:creator>小虫旺福</dc:creator><author>小虫旺福</author><pubDate>Tue, 21 Oct 2008 06:24:00 GMT</pubDate><guid>http://www.blogjava.net/sy1214520/archive/2008/10/21/235661.html</guid><wfw:comment>http://www.blogjava.net/sy1214520/comments/235661.html</wfw:comment><comments>http://www.blogjava.net/sy1214520/archive/2008/10/21/235661.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sy1214520/comments/commentRss/235661.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sy1214520/services/trackbacks/235661.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/sy1214520/aggbug/235661.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sy1214520/" target="_blank">小虫旺福</a> 2008-10-21 14:24 <a href="http://www.blogjava.net/sy1214520/archive/2008/10/21/235661.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hibernate中对象的3种状态----瞬时态、持久态、脱管态 </title><link>http://www.blogjava.net/sy1214520/archive/2008/10/21/235659.html</link><dc:creator>小虫旺福</dc:creator><author>小虫旺福</author><pubDate>Tue, 21 Oct 2008 06:23:00 GMT</pubDate><guid>http://www.blogjava.net/sy1214520/archive/2008/10/21/235659.html</guid><wfw:comment>http://www.blogjava.net/sy1214520/comments/235659.html</wfw:comment><comments>http://www.blogjava.net/sy1214520/archive/2008/10/21/235659.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sy1214520/comments/commentRss/235659.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sy1214520/services/trackbacks/235659.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/sy1214520/aggbug/235659.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sy1214520/" target="_blank">小虫旺福</a> 2008-10-21 14:23 <a href="http://www.blogjava.net/sy1214520/archive/2008/10/21/235659.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>