﻿<?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/xiaoyi/category/33885.html</link><description>阳光总在风雨后,让我们在雨中毅然前行,收获每一份喜悦的欢笑o(∩_∩)o...</description><language>zh-cn</language><lastBuildDate>Wed, 22 Oct 2008 19:04:53 GMT</lastBuildDate><pubDate>Wed, 22 Oct 2008 19:04:53 GMT</pubDate><ttl>60</ttl><item><title>hibernate一对一完美版</title><link>http://www.blogjava.net/xiaoyi/articles/224349.html</link><dc:creator>可爱的小毅</dc:creator><author>可爱的小毅</author><pubDate>Mon, 25 Aug 2008 20:10:00 GMT</pubDate><guid>http://www.blogjava.net/xiaoyi/articles/224349.html</guid><wfw:comment>http://www.blogjava.net/xiaoyi/comments/224349.html</wfw:comment><comments>http://www.blogjava.net/xiaoyi/articles/224349.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiaoyi/comments/commentRss/224349.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiaoyi/services/trackbacks/224349.html</trackback:ping><description><![CDATA[<p><span class="Title"><span class="Title"><span class="Title"><strong><span style="color: red"><span style="color: red"><span style="color: red"><span style="color: red"><span style="color: red"><span><span style="color: red"><span style="color: red"><span style="color: red"><span style="color: red"><span><span style="color: #1485a0">Hibernate一对一关系操作对象 </span></span></span></span></span></span></span></span></span></span></span></span></strong></span></span></span></p>
<pre><br />
<strong><span style="color: red"><span style="color: red"><span style="color: red"><span style="color: red"><span style="color: red"><span><span style="color: red"><span style="color: red"><span style="color: red"><span style="color: red"><span><span style="color: #1485a0">总的来说有四种方式，我将意义的在本片文章中介绍</span></span></span></span></span></span></span></span></span></span></span></span></strong></pre>
<pre><strong><span style="color: red"><span style="color: red"><span style="color: red"><span style="color: red"><span style="color: red"><span><span style="color: red"><span style="color: red"><span style="color: red"><span style="color: red"><span><span style="color: #1485a0">一：以主键关联</span></span></span></span></span></span></span></span></span></span></span></span></strong></pre>
<pre><br />
<strong><span style="color: red"><span style="color: red"><span style="color: red"><span style="color: red"><span style="color: red"><span><span style="color: red"><span style="color: red"><span style="color: red"><span style="color: red"><span><span style="color: #1485a0">&nbsp;概念：关联的两个实体共享一个主键<br />
例如我们建立两个表，分别为user id pk,name,password<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;userinfor id pk,email,age,address<br />
user和userinfor共享一个主键id，并且两个表是一对一关系，那么如何让一个表引用另一个表生成的主键那？我们可以用hibernate的主键foreign机制生成。</span></span></span></span></span></span></span></span></span></span></span></span></strong></pre>
<pre><strong><span style="color: red"><span style="color: red"><span style="color: red"><span style="color: red"><span style="color: red"><span><span style="color: red"><span style="color: red"><span style="color: red"><span style="color: red"><span><span style="color: #1485a0">我们先看看user.hbm.xml文件<br />
.......<br />
&lt;hibernate-mapping&gt;<br />
&nbsp;&lt;class name="model.User" lazy="true"&gt;<br />
&nbsp;&nbsp;&lt;id name="id" unsaved-value="null"&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;generator class="uuid.hex"/&gt;<br />
&nbsp;&nbsp;&lt;/id&gt;<br />
&nbsp;&nbsp;&lt;property name="name" type="string"/&gt;<br />
&nbsp;&nbsp;&lt;property name="password" type="string"/&gt;<br />
&nbsp;&nbsp;&lt;one-to-one name="userinfor"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; class="model.Userinfor"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fetch="join"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cascade="all"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /&gt;<br />
&nbsp;&lt;/class&gt;<br />
&lt;hibernate-mapping&gt;<br />
.......<br />
&nbsp;&nbsp;&nbsp; one-to-one的属性cascade=all表示user的增删改操作也会反映在userinfor对象当中。我们再看看userinfor.hbm.xml文件.<br />
&lt;hibernate-mapping&gt;<br />
&nbsp;&lt;id name="id"&gt;<br />
&nbsp;&nbsp;&lt;generator name="foreign"&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;param name="property"&gt;user&lt;/param&gt;<br />
&nbsp;&nbsp;&lt;/generator&gt;<br />
&nbsp;&lt;/id&gt;<br />
&nbsp;&lt;property name="email" column="email" type="string"/&gt;<br />
&nbsp;&lt;property name="age" column="age" type="int"/&gt;<br />
&nbsp;&lt;property name="address" column="address" type="string"/&gt;<br />
&nbsp;&lt;one-to-one name="user"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; class="model.User"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; constrained="true"&lt;!-引用user的主键id为外键--&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /&gt;<br />
&lt;/hibernate-mapping&gt;<br />
让我们看看java的代码片段<br />
.....<br />
User user=new User();<br />
user.setName("name");<br />
user.setPassword("pass");<br />
Userinfor u=new Userinfor();<br />
u.setEmail("email");<br />
u.setAge(11);<br />
u.setAddress("address");<br />
user.setUserinfor(u);<br />
u.setUser(user);<br />
DAO.saveObj(user);<br />
最后打开你的数据库旧可以看到结果了。</span></span></span></span></span></span></span></span></span></span></span></span></strong></pre>
<pre><br />
<strong><span style="color: red"><span style="color: red"><span style="color: red"><span style="color: red"><span style="color: red"><span><span style="color: red"><span style="color: red"><span style="color: red"><span style="color: red"><span><span style="color: #1485a0">二，一对一以外键关联</span></span></span></span></span></span></span></span></span></span></span></span></strong></pre>
<pre><br />
<strong><span style="color: red"><span style="color: red"><span style="color: red"><span style="color: red"><span style="color: red"><span><span style="color: red"><span style="color: red"><span style="color: red"><span style="color: red"><span><span style="color: #1485a0">&nbsp;以外键关联的概念：两个实体各自有不同的主键，但是一个实体有一个外键引用另一个实体的主键。例如：<br />
&nbsp;表 user id pk,name,passeword<br />
&nbsp;&nbsp;&nbsp; userinfor id pk,uid fk,infor<br />
&nbsp;先看user.hbm.xml<br />
&nbsp;......<br />
&nbsp;&lt;hibernate-mapping&gt;<br />
&nbsp;&lt;class name="user" table="user" lazy="true"&gt;<br />
&nbsp;&nbsp;&lt;id name="id" unsaved-value="null"&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;generator class="uuid.hex"/&gt;<br />
&nbsp;&nbsp;&lt;/id&gt;<br />
&nbsp;&nbsp;&lt;property name="name" type="string"/&gt;<br />
&nbsp;&nbsp;&lt;property name="password" type="string"/&gt;<br />
&nbsp;&nbsp;&lt;one-to-one name="userinfor"<br />
&nbsp;&nbsp;&nbsp;class="model.Userinfor"<br />
&nbsp;&nbsp;&nbsp;fetch="join"<br />
&nbsp;&nbsp;&nbsp;cascade="all"<br />
&nbsp;&nbsp;&nbsp;/&gt;<br />
&nbsp;&lt;/class&gt;<br />
&nbsp;&lt;/hibernate-mapping&gt;<br />
&nbsp;可以看到这个同我们第一次用到的一样啊<br />
&nbsp;然后我们看看userinfor.hbm.xml的结构<br />
&nbsp;.....<br />
&nbsp;&lt;hibernate-mapping&gt;<br />
&nbsp;&lt;class name="userinfor" table="userinfor" lazy="true"&gt;<br />
&nbsp;&nbsp;&lt;id name="id"&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;generator class="uuid.hex"/&gt;<br />
&nbsp;&nbsp;&lt;/id&gt;<br />
&nbsp;&nbsp;&lt;property name="infor" column="infor" type="string"/&gt;<br />
&nbsp;&nbsp;&lt;many-to-one name="user"<br />
&nbsp;&nbsp;&nbsp;&nbsp;class="model.User"<br />
&nbsp;&nbsp;&nbsp;&nbsp;unique="true"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;!-唯一的多对一，其实就便成了一对一了--&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;columnn="uid"<br />
&nbsp;&nbsp;&nbsp;&nbsp;/&gt;<br />
&nbsp;&lt;/class&gt;<br />
&nbsp;&lt;/hibernate-mapping&gt;<br />
&nbsp;以外键关联的一对一，其实就变成了一对多的双向关联，编写时直接按照一对多和多对一的要求编写，最后在many-to-one加上unique='true'即可说明他只不过是一对多关系的一个特例。编写java代码：<br />
.......<br />
User u=new User();<br />
u.setName("name");<br />
u.setPassword("password");<br />
Userinfor ui=new Userinfor();<br />
ui.setInfor("infor");<br />
u.setUserinfor(ui);<br />
ui.setUser(u);<br />
DAO.saveObj(u);<br />
......</span></span></span></span></span></span></span></span></span></span></span></span></strong></pre>
<pre><strong><span style="color: red"><span style="color: red"><span style="color: red"><span style="color: red"><span style="color: red"><span><span style="color: red"><span style="color: red"><span style="color: red"><span style="color: red"><span><span style="color: #1485a0">三：默认的级连关系</span></span></span></span></span></span></span></span></span></span></span></span></strong></pre>
<pre><br />
<strong><span style="color: red"><span style="color: red"><span style="color: red"><span style="color: red"><span style="color: red"><span><span style="color: red"><span style="color: red"><span style="color: red"><span style="color: red"><span><span style="color: #1485a0">&nbsp;一对多默认级连关系为预先抓取，而一对多，多对多都是立即加载<br />
看看user.hbm.xml<br />
&lt;one-to-one name="userinfor"<br />
&nbsp;&nbsp;class="model.Userinfor"<br />
&nbsp;&nbsp;cascade="all"/&gt;<br />
以上我们并没有显示的设置级连关系。这样在取的userinfor时将用默认的级连关系。<br />
.....<br />
User u=(User)DAO.getByid(User.class,"字符穿，相当于where id='此值'");</span></span></span></span></span></span></span></span></span></span></span></span></strong></pre>
<pre><br />
<strong><span style="color: red"><span style="color: red"><span style="color: red"><span style="color: red"><span style="color: red"><span><span style="color: red"><span style="color: red"><span style="color: red"><span style="color: red"><span><span style="color: #1485a0">四：延迟加载</span></span></span></span></span></span></span></span></span></span></span></span></strong></pre>
<pre><br />
<strong><span style="color: red"><span style="color: red"><span style="color: red"><span style="color: red"><span style="color: red"><span><span style="color: red"><span style="color: red"><span style="color: red"><span style="color: red"><span><span style="color: #1485a0">&nbsp;一对一关系进行延迟加载时与其他关系不同，多对一是在class标签中设置lazy='true'，一对多和多对多是在set标签中设置lazy=&#8221;true&#8220;，而一对一则在class标签当中设置lazy='true'并且在one-to-one标签当中设置constrained='true'。<br />
&nbsp;.....<br />
&nbsp;&lt;hibernate-mapping&gt;<br />
&nbsp;&lt;class name="model.User" table="user"&gt;<br />
&nbsp;&nbsp;&lt;one-to-one name="userinfor"<br />
&nbsp;&nbsp;&nbsp;&nbsp;class="model.Userinfor"<br />
&nbsp;&nbsp;&nbsp;&nbsp;contrained="true"<br />
&nbsp;&nbsp;&nbsp;&nbsp;cascade="all"<br />
&nbsp;&nbsp;&nbsp;&nbsp;/&gt;<br />
&nbsp;&lt;/class&gt;<br />
&nbsp;&lt;/hibernate-mapping&gt;<br />
java代码<br />
...<br />
User u=(User)DAO.getByid(User.class,"id");<br />
.....<br />
次代码只是加载了user对象，而没有加载userinfor对象，而且忽略了默认的预先抓取，（这是默认的，只有显示的指定fatch='true'时才采用预先抓取的）<br />
完</span></span></span></span></span></span></span></span></span></span></span></span></strong></pre>
<img src ="http://www.blogjava.net/xiaoyi/aggbug/224349.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiaoyi/" target="_blank">可爱的小毅</a> 2008-08-26 04:10 <a href="http://www.blogjava.net/xiaoyi/articles/224349.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hibernate关系映射(一对一)</title><link>http://www.blogjava.net/xiaoyi/articles/223453.html</link><dc:creator>可爱的小毅</dc:creator><author>可爱的小毅</author><pubDate>Thu, 21 Aug 2008 04:13:00 GMT</pubDate><guid>http://www.blogjava.net/xiaoyi/articles/223453.html</guid><wfw:comment>http://www.blogjava.net/xiaoyi/comments/223453.html</wfw:comment><comments>http://www.blogjava.net/xiaoyi/articles/223453.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiaoyi/comments/commentRss/223453.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiaoyi/services/trackbacks/223453.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 人与卡(身份证)---一对一package&nbsp;com.yz.pojos;public&nbsp;class&nbsp;Person&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;Integer&nbsp;pid;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;String&nbsp;pname;&nb...&nbsp;&nbsp;<a href='http://www.blogjava.net/xiaoyi/articles/223453.html'>阅读全文</a><img src ="http://www.blogjava.net/xiaoyi/aggbug/223453.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiaoyi/" target="_blank">可爱的小毅</a> 2008-08-21 12:13 <a href="http://www.blogjava.net/xiaoyi/articles/223453.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hibernate关系映射(多对多)</title><link>http://www.blogjava.net/xiaoyi/articles/223445.html</link><dc:creator>可爱的小毅</dc:creator><author>可爱的小毅</author><pubDate>Thu, 21 Aug 2008 04:04:00 GMT</pubDate><guid>http://www.blogjava.net/xiaoyi/articles/223445.html</guid><wfw:comment>http://www.blogjava.net/xiaoyi/comments/223445.html</wfw:comment><comments>http://www.blogjava.net/xiaoyi/articles/223445.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiaoyi/comments/commentRss/223445.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiaoyi/services/trackbacks/223445.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 用户与角色---多对多用户package&nbsp;com.yz.pojos;import&nbsp;java.util.HashSet;import&nbsp;java.util.Set;/**&nbsp;*//**&nbsp;*&nbsp;Users&nbsp;generated&nbsp;by&nbsp;MyEclipse&nbsp;Persistence...&nbsp;&nbsp;<a href='http://www.blogjava.net/xiaoyi/articles/223445.html'>阅读全文</a><img src ="http://www.blogjava.net/xiaoyi/aggbug/223445.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiaoyi/" target="_blank">可爱的小毅</a> 2008-08-21 12:04 <a href="http://www.blogjava.net/xiaoyi/articles/223445.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hibernate关系映射(一对多) </title><link>http://www.blogjava.net/xiaoyi/articles/223444.html</link><dc:creator>可爱的小毅</dc:creator><author>可爱的小毅</author><pubDate>Thu, 21 Aug 2008 04:00:00 GMT</pubDate><guid>http://www.blogjava.net/xiaoyi/articles/223444.html</guid><wfw:comment>http://www.blogjava.net/xiaoyi/comments/223444.html</wfw:comment><comments>http://www.blogjava.net/xiaoyi/articles/223444.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiaoyi/comments/commentRss/223444.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiaoyi/services/trackbacks/223444.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 客户与订单---一对多package&nbsp;com.yz.pojos;import&nbsp;java.util.HashSet;import&nbsp;java.util.Set;/**&nbsp;*//**&nbsp;*&nbsp;Customer&nbsp;generated&nbsp;by&nbsp;MyEclipse&nbsp;Persistence&nb...&nbsp;&nbsp;<a href='http://www.blogjava.net/xiaoyi/articles/223444.html'>阅读全文</a><img src ="http://www.blogjava.net/xiaoyi/aggbug/223444.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiaoyi/" target="_blank">可爱的小毅</a> 2008-08-21 12:00 <a href="http://www.blogjava.net/xiaoyi/articles/223444.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>