关联映射
所谓关联映射即:即对象之间有引用关系。在数据库中如果要建立两张表的关联关系,就需要外键来连接它们,数据库表之间的关系是没有方向性的,彼此都是透明。而在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>
备注:总之不管是什么样的关联,先分析好数据库表之间的关系就没有问题。