使用Hibernate的问题:多个产品表使用一个订单表的问题

    
dkhz 03-09-10

多个产品表使用一个订单表在Hibernate中的设计问题
由于产品内容的很大差异,使用了多个表保存不同的产品
产品表1:
product_1
--- product_id (pk)
--- product_name
--- other_info
....

产品表2:
product_2
--- product_id (pk)
--- product_name
--- other_info
...

等等其它产品表

使用同一个表来保存所有产品的订单
order
--- order_id (pk)
--- product_table
--- product_id (FK)
--- other_column
...

order.product_id和product_1 , product_2的product_id是多对一的关系
在order.hbm.xml中定义
<many-to-one name="product1" class="test.hibernate.Product1">
<many-to-one name="product2" class="test.hibernate.Product2">
可以实现操作,但使用起来很别扭,必需显式的指定产品类型
newOrder.addProduct1Order(),newOrder.addProduct2Order(),....
读订单时:
aOrder.getProduct1Order(), aOrder.getProduct2Order(),....

请教各位道友:有没有一个优雅的解决方法?

谢谢了!

feiyuwen
2003-09-10 15:36

能实现就可以的啊,就是麻烦点。
不过如果设计一个product接口,让所有的product类实现它,这样就可以直接aOrder.getProductOrder(),aOrder.setProductOrder()去做,但是product的mapping文件我就不太清楚怎么写了

robbin
2003-09-10 15:46

这不是Hibernate的问题,是数据库设计的问题,既然都是产品这种对象,在系统设计看来,就是一个对象。你可以加一个“类型”属性,来区分不同种的产品。

--- product_id (pk)
--- product_name
--- product_type
--- other_info
....

yehs220
2003-09-10 15:51

<any>可以做到,要两列,一列保存关联实体的类型,另一列保存标识

dkhz
2003-09-10 15:55

谢谢robbin这么快回复
数据库使用的是MySQL,
1. 由于性能和其它方面的考虑,不可以把所有记录放到一个表中,mysql对超过千万记录的表操作很慢
2. 产品类型区别很大,有很多字段不相同,这么多字段放在一个表里也不合理

除了更改数据库设计的方法外,Hibernate可不可以解决这个问题呢?

4Go 1 2 3 4 下一页