hibernate多对多映射

hibernate的映射关系网上介绍的人很多。但有没有感觉看完之后就忘掉,或则刚看完还是能记住,可是过一会儿,又搞不清楚哪个表,哪个字段,哪个属性了。IDE可以根据DTD给你提示,但是仔细一看,都是差不多的元素,什么one2many,many2many,什么column,table,IDE可是没有给你提示这些东西是对应哪个的,就算是用IDE生成出来的东西,也经常会出错,需要修改。说了这么多废话,现在切到主题。
我们都知道,hibernate的多对多映射是通过一个链接表的实现的。链接表是纽带。多对多中。两个JAVA对象如何才能表示多对多?我们最容易想到的方式就是在各自的成员变量里面,都包含一个集合(Set),来包含N多个另外一个对象。比如一本书可以有很多读者,这样书这个类里面就定义一个Set来包含N多个读者对象。反之亦然。
其它的我就不罗嗦了,多对多关键就一个Set(当然List等其它情况,类似)。

假设A,B两个类多对多:
在 A.hbm.xml中,有下面一项:

<set name="A中的Set<B>" table="A-B链接表名">
<!--这里不一定是泛型,只是表示说这个Set是放B的 -->
<key column="外键A"/>
<!--
这里的"外键A"就是"链接表"中相对于A的ID,也就是说这个column是在"A-B链接表"中的某一个column ,对应的ID是"A的表"中的ID-->

<many-to-many class="类名B" column="外键B"/>
<!--
这里的"外键B",也是在 "A-B链接表"中的column,对应的ID就是"B的表"中的ID了。
-->
</set>

这只是单向,双向另一个也类似写一下就OK了,对于有些cascade,inverse等,如何设置,就看你自己后面怎么用了,因此就不罗嗦了。

总结:
1、Set --- 含Set的一方,它对应的肯定可以多个。也就是 X to-many类(当然你也可以限制它为唯一的。这里any也有,但应该不常见)
2、Set标签里面key -- "链接表"中的column,对应本类的ID。
3、多对多,Set标签里面是用many-to-many,Set标签里面可没有 X to-one的,否则还要Set来做什么呢。这里的column也是在"链接表"中的列,这么记:与上面key的column那个不同的就是了。
再顺便提一下有时会碰到的情况,在保存时,链接表中的对应数据没有插进去,试着调用一下session.flush(),当然如果是手动提交,我想应该没有这个问题。
表答得比较混乱,见谅了。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值