hibernate关联关系映射总结

这里主要是为了自己梳理学习的知识,重在理解不是代码实践。


第一问:关联关系映射干什么用的?
hibernate给我们提供的就是ORM功能,我们通过组织对象(包含私有对象)配置xml文件让hibernate帮助我们完成,类与类的关系映射到到数据库中表与表之间。


第二问:关联关系有那些呢?
单向一对一,双向一对一,单向一对多,单向多对一,双向一对多,单向多对多,双向多对多。
(双向一对多,多对一没差)

首先先解释单双向的问题,单双向在这里的含义是什么呢?这里的方向意味着控制权。举个栗子,单向一对多,表示我们可以在一端得到多端的对象,进而修改多端的属性,具体的一对多的栗子在下文中会给出。


单向多对一

先说这个会好说一点,这里我们用人和地区来表示此关系,人定居的地区是确定的,一个人只能定居在一个地区,一个地区定居的有好多好多的人。
我么怎么映射这种关系呢
从人这个方向出发,多对1。
我们在person对象中设置一个私有对象address,以便我们可以通过person对象拿到address对象。
光有这些是不够的,现在只是做了前期准备,接着我们要做向数据库的映射。
person.hbm.xml
正常属性我们就通过property标签 name指定对象中的属性,coulmn指定映射生成表中的对应的列名。
重头戏来了,我们怎么映射这个address对象呢?
many-to-one标签来实现,在该标签内我们name指定 私有对象的属性名,coulmn指的是n端映射的表的外键列
many-to-one指定的是我们的当前表的外键,用私有对象对应表的主键做外键
我们从已存在的班级中选择,然后进行分配。
也可以设置级联save-update,这样就可以直接生成新的班级了

这其实很像数据库中的外键。


单向一对多

多对一的时候我们是通过在多端设置一个私有对象以及在多端配置文件用many-to-one来映射多对一关系
在一对多中 我们通过set集合来解决映射问题
在一端对象中声明的必须是set接口,这样hibernate他才能识别,在相应配置文件中使用set标签即可。我们假设现在映射的关系为班级和学生,在班级类中含有属性名为students的Set集合,在set标签结构如下:

<set name="students">
     <key column="classesid"/>
     <one-to-many class="Student"/>
</set>

set name就是我们定义的set集合;key column指的是在student表中使用外键的列名,简单来说 就是class表中的ID在student表中的映射
外键
引用的就是班级的ID
这种总共就两张表student class
与集合映射不同
双向一对多、多对一也是一样
按上面配置即可,hibernate不建议一端进行控制,在一端set标签 inverse=‘true’,由多端维护关系。
对象
双向一对一
基于外键的一对一映射
我们就假设根据身份证号可以查询到学号,由学号无法查询到身份证号,我就是随便假设了一下,好像也没什么好一点的栗子,学姐香水好香。
我们映射的时候怎么做的

  • 0
    点赞
  • 0
    收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
评论

打赏作者

阿福的时光机

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值