`
penghao122
  • 浏览: 357873 次
  • 性别: Icon_minigender_1
  • 来自: 广东珠海
社区版块
存档分类
最新评论

hibernate 全面学习->hibernate 关联映射学习

阅读更多
hibernate 关联映射学习包括 一对一,一对多,多对多 请查看相应的附件

Person  -> Idcard

Hibernate一对一主键关联映射(单向关联)

主键关系:即让两个对象的id保持相同,这样可以避免多余的字段被创建

!!注意:<one-to-one>标签指示Hibernate如何加载其引用对象,
  缺省情况下根据主键加载引用对象

Hibernate一对一主键关联映射(双向关联)

需要在idcard中加入<one-to-one>指向person,告知hibernate如何加载person,
缺省情况下根据主键加载


Hibernate一对一唯一外键关联映射(单向关联)

实际上是many-to-one的特例
可以采用many-to-one的标签指定“多”一端的unique="true",即限制“多”
一端的多重性为“一”,通过这种手段来实现一对一关联

这种方法会添加一个外键,指向另外一端的主键(IdCard)



Hibernate一对一唯一外键关联映射(双向关联)

双向关联需要在另外一端(IdCard)端添加<one-to-one>标签,
指示hibernate如何加载其引用对象,默认情况下会根据主键匹配进行加载Person
因为外键关联映射中,两个实体的关系是由person的外键idcard维护的,所以不能指定
使用persion的主键对person进行加载,而要根据Person的外键idcard进行加载,如:
<one-to-one name="person" property-ref="idCard" />

Hibernate一对多单向关联映射

这种映射的本质是利用了多对一的关联映射的原理

多对一关联映射:是在多的一端添加一个外键维护多指向一的关联引用
一对多关联映射:是在多的一端添加一个外键维护一指向多的关联引用

也就是说,一对多和多对一的映射策略是一致的,只是站的角度不同

缺点:
  * 更新student表中的classesid字段时,需要对每一个student发出一个update的sql,
    来更新classesid字段
  * 如果将t_student表中的classesis设置为非空,则不能保存student数据,因为关系是由
    classes维护的,在保存student时,还没有对应的classesid被生成



Hibernate 一对多双向关联映射

一对多双向关联映射的方法:

在一一端:
在集合标签里面使用<key>标签来表明需要在对方的表中添加一个外键指向一一端。

在多一端:
使用<many-to-one>标签来映射。

需要注意:<key>标签所指定的外键字段名需要与<many-to-one>标签定义的外键字段名一致,否则便会造成引用数据的
丢失!

--------------------------------------------------------------------------------------
如果从一端来维护一对多双向关联的关系,hibernate会发出多余的update语句,所以
一般地情况下,我们便会从多一端来维护其关联关系!
----------------------------------------------------

关于inverse属性:
inverse属性可以被设置到集合标签<set>上,表示在存储双向一对多关联映射的时候,
存储的是那一方的关联引用。默认情况下,inverse=“false”,所以,我们可以从一一端
或者多一端来维护两者之间的关系;如果我们设置inverse=“true”,则只能通过多一端来
维护两者之间的关系。inverse属性可以被用在一对多和多对多双向关联中;

注意:inverse属性只是在将数据持久化到数据库的过程中发挥作用.

Hibernate多对一关联

关联映射的本质
* 是将关联关系映射到数据库中,关联关系在对象模型中体现为内存中的一个或多个引用

<many-to-one>标签会在“多”的一端添加一个外键,指向“一”的一端,这个外键是由<many-to-one>
标签中的column属性定义的,如果忽略column属性,默认创建的外键与属性名相同

<many-to-one>标签的定义实例:
<many-to-one name="group" column="relatedGroup"/>
可以指定class属性,如果不指定Hibernate会自动找其关联类

理解级联的含义



多对多单向关联

需要注意映射规则:
<set name="users" table="t_user_role">
<key column="roleid"/>
<many-to-many class="com.bjsxt.hibernate.User" column="userid"/>
</set>

多对多双向关联

注意映射规则:
<set name="roles" table="t_user_role">
<key column="userid"/>
<many-to-many class="com.bjsxt.hibernate.Role" column="roleid"/>
</set>

table属性必须和单向关联中table的 名称相同;
<key>中的column属性值必须等于单向关联中<many-to-many>标签指向的column的属性值
<many-to-many>中column属性值必须等于单向关联中<key>中column的属性值

分享到:
评论
7 楼 zhangjiajun1988 2010-01-11  
不管是哪里的。。能奉献出来不错了。。顶楼主
6 楼 wjzliu0064 2009-01-05  
5 楼 anthon_lx 2008-08-30  
现在尚学堂的资料是满天飞了吧!
4 楼 penghao122 2008-08-29  
全是尚学堂的视频教程。不敢独想

所以。。搞出来啦。。

相互学习。。没有对和错
3 楼 keenvi 2008-08-22  
不管是不是照搬来的,拿出来分享就该非常感谢了
引用
评论
zhangxu261 2008-07-30
楼主!这个好像是尚学堂hibernate里面的readme啊,你照搬过来了?

zhangxu261 不应该有啥别的意思.
2 楼 zhangxu261 2008-07-30  
楼主!这个好像是尚学堂hibernate里面的readme啊,你照搬过来了?
1 楼 tianma168 2008-07-21  
你是女的??????  汗  当今世上还有这么专业的女人(而且还是程序员)。

相关推荐

Global site tag (gtag.js) - Google Analytics