Hiberante注解两个一对多关系来映射多对多关系

来源:互联网 发布:浙江省基层网络直报 编辑:程序博客网 时间:2024/04/30 17:32

 

Hibernate可以通过*.hbm.xml配置文件能很好地把多对多关系拆分成两个一对多的关系,但Hibernate Annotation的文档中没有说到这个点上来。下面通过实例说明用注解来实现多对多拆分成两个一对多。(这里以大家熟悉的商品-订单之间的对应关系为举例)

 

  下面以商品Product和订单Order之间的多对多关系来说明。

      Product的属性包括:

  • id
  • name
  • price

  Order的属性包括:

  • id
  • date(下订单的时间)

为什么要把多对多关系拆分成两个一对多?

  因为多对多关系不能保存两个实体之间共有的属性。比如,如何记录订单A中购买的商品B的数量呢?如果以多对多映射就不能实现了。

 

中间实体----用来记录两个多对多实体之间共有关系

  在Product和Order之间的关系中,可以用一个OrderItem实体来表示两者多对多中的众多关系中的一个关系。即Product与OrderItem,Order与OrderItem之间的关系为一对多的关系。

 

  OrderItem的属性包括:

  • product(假如当前记录的是商品C)
  • order(假如当前记录的是订单D)
  • quantity(这里记录的是订单D中商品C的数量)

实例代码(省略了类包引用):

复合主键类:

OrderItem类:
 

Product类:

 

 

 

Order类:

 

 


 

原创粉丝点击