Hibernate-使用Map映射表的多对多关系


映射

class Order{

    Map<Product, Integer> orderitems;

}

 

//数据库中有orderitems中间表,因为关系模型的多对多就是通过中间表实现的

由于orderitems中间表,除了两个相关的外键外,只有一个额外的描述列,这样的多对多关系恰好可以使用Map中的value直接描述出来,


在Order.hbm.xml中这样配置

<map name="orderitems" table="orderitems" cascade="save-update">
<!-- map-key中主键在orderitems中的列 -->
    <key>
        <column name="oid"/>
    </key>
    <map-key-many-to-many class="entity.Products" column="pid" ></map-key-many-to-many>
    <element column="num" type="integer"></element>
</map>    

额外:

多对多情况大致可分3种:

1.中间表只有两张相关表的外键:可以采用双向Set或者List实现
2.中间表除外键外,还有额外一列描述信息:采用双向Map实现,其中map的key为另一个表的实体,value为中间表的那额外的一列描述值
(这种情况一般映射为单向的。例如订单到商品,额外信息为购买数量)
3.中间表除外键外,还有额外多列描述信息:这种情况,必须为中间表创建对应实体,用以描述多出的中间表的列,此外关系一般也选择单向的
(例如,订单->订单项->商品,此时订单项除了商品和数量外,可能还有其他额外描述信息,例如最终成交单价,小计等)

另外:2的情况也可以采用3的方法完成,而且采用3更合理,此时中间表对应的实体额外的属性只有一列

转载于:https://www.cnblogs.com/tommychok/p/7200642.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值