关联映射

来源:互联网 发布:犀牛软件 垃圾袋 编辑:程序博客网 时间:2024/06/04 23:16


关联映射

所谓关联映射即:即对象之间有引用关系。在数据库中如果要建立两张表的关联关系,就需要外键来连接它们,数据库表之间的关系是没有方向性的,彼此都是透明。而在java程序中如果要使两个类建立关系的话,那么就需要使用属性组合引用对方来产生关联,java程序中的关联是有方向性的,如果没有双向管理那么彼此是不透明的。

 

一对多、多对一(单向)

多对一:案列为User ---->Group

多对一操作的时候,保存操作时最好先保存一的那一边,然后再保存多的那一边,或者直接使用级联属性cascade=save-update。原则就是先保存没有依赖的对象,然后保存有依赖的对象。本案例中:先保存Group对象,再保存User对象。

 

一对多:案列为Teacher---->Student

一对多一的那一边的映射文件是主要配置的地方

Teacher.hbm.xml中核心配置

<set name=students>

<!--一对多的时候,它增加的这key字段是增加到对方Student中的(数据库可看到)-->

<key column=tec_id></key>  

<one-to-many class=com.xuyi.pojo.Student/>

</set>

 

一对一(单向)

一对一(基于主键):即有一边的主键即是主键又是外键不推荐使用这种方式

 

一对一(基于外键):这种方式其实就是多对一的一种特殊情况

举例:Husband———>Wife          huaband指向wife是单向的。

Husband.hbm.xml中的核心配置是:

<many-to-one name=wife unique=true/>

<!--这边我们使用的是多对一标签,但是我们想要的是一对一,1:1就是n:1的特殊情况,所以我们只需要控制唯一性约束即可 -->

 

 

一对一(双向)

 

一对一(基于主键):即有一边的主键即是主键又是外键不推荐使用这种方式

 

一对一(基于外键):这种方式其实就是多对一的一种特殊情况

举例:Person<————>IdCard

Perosn核心配置:

<many-to-one name=idCard unique=true/> 

备注:使用many-to-one但是有唯一性约束

IdCard核心配置:

<one-to-one name=person property-ref=idCard/>

备注:使用one-to-one,但是需要一个Person的参照属性

 

 

 

多对多(单向、双向)

多对多(单向):有点类似多对一了,实际生活中是很少遇到这种情况的。

 

多对多(双向):必须要有以防放弃维护外键

举例:Team<———>Player (加入现实生活中存在这种情况)

Team.hbm.xml核心配置:

<set name=players table=t_team_player inverse=false>

<key column=team_id></key>

<many-to-many class=com.xuyi.pojo.Player colum=player_id/>

</set>

 

Player.hbm.xml核心配置:

<set name=teams table=t_team_player inverse=false>

<key column=player_id></key>

<many-to-many class=com.xuyi.pojo.Team colum=team_id/>

</set>

 

   

备注:总之不管是什么样的关联,先分析好数据库表之间的关系就没有问题。

 

0 0
原创粉丝点击