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

03-09-10 dkhz
多个产品表使用一个订单表在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 下一页