首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

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

2012-09-11 
Hiberante注解两个一对多关系来映射多对多关系  Hibernate可以通过*.hbm.xml配置文件能很好地把多对多关系

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

  Hibernate可以通过*.hbm.xml配置文件能很好地把多对多关系拆分成两个一对多的关系,但Hibernate Annotation的文档中没有说到这个点上来。下面通过实例说明用注解来实现多对多拆分成两个一对多。

?

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

????? Product的属性包括:

idnameprice

  Order的属性包括:

iddate(下订单的时间)为什么要把多对多关系拆分成两个一对多?

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

?

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

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

?

  OrderItem的属性包括:

product(假如当前记录的是商品C)order(假如当前记录的是订单D)quantity(这里记录的是订单D中商品C的数量)实例代码(省略了类包引用):复合主键类:
@Entity@org.hibernate.annotation.Entity(dynamicInsert=true,dynamicUpdate=true)@Table(name="tbl_order")public class Order implements Serializable{    private int id;    private Calendar date;    private Set<OrderItem> orderItems;    @Id    @GenericGenerator(name="g_id",strategy="increment")    @GeneratedValue(generator="g_id")    public int getId(){        return id;    }    public void setId(int id){        this.id=id;    }    public Calendar getDate(){        return date;    }    public void setDate(Calendar date){        this.date=date;    }    @OneToMany(mappedBy="order")    public Set<OrderItem> getOrderItems(){        return orderItems;    }    public void setOrderItems(Set<OrderItem> orderItems){        this.orderItems=orderItems;    }}
?

?

热点排行