浏览 3667 次
锁定老帖子 主题:求一种Hibernate的对象的关系的设计
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-06-07
class TbFinancial { Integer id ,fk_id; String type ; Float number; //这里是入账或出账的金额 } 有一个TbSale, 存门市的销售记录 class TbSale { Integer id; TbProduct product; TbClient client; Float productAmount; Float totalPaid; } 如果从表的关系来说, financial表是通过type和fk_id字段, 来关联到sale表的某条记录, 从而计算出入账或出出账数目的,sql如下: select fk_id,type from financial f where type='门市销售' left outter join (select * from sales s) where f.fk_id=s.id 如果financial表关联到退货记录表 refund ,sql就是这样的 select fk_id,type from financial f where type='退货记录' left outter join (select * from refund r) where f.fk_id=r.id 这样通过type和fk_id来与其它表连接的话,就保证了financial表的通用性, 但是用sql就容易搞定,如果转成Hibernate对象,遇到两个问题 1 TbFinancial对象的属性中,应该包括其它表的VO, 但这个VO的类型是不确定的,有可能是TbSale, 有可能是TbRefund,这怎么配置呢? 2 TbFinancial对象和其它VO的关系, 不是one-to-many, 也不是many-to-one, 也不是many-to-many,是one-to-one吗? 像这种问题, 请教一下有丰富hibernate经验的朋友,看看怎么解决,谢谢. 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-06-07
这似乎是any映射的极好的应用场景。
|
|
返回顶楼 | |
发表时间:2007-06-08
感觉lz的TbFinancial包括两种不同的对象,似乎在设计上存在问题,建议还是把两种对象分开放在两个不同的数据表中。
|
|
返回顶楼 | |
发表时间:2007-06-08
1.去看hibernate里继承那一章
2.用不用继承,都应该是一对一,不过可以配成多对一来使用延迟加载 3.使用了hibernate,仍然可以按以前的方式处理,不一定非得分两种对象,关键是有没有必要 |
|
返回顶楼 | |
发表时间:2007-06-08
这不是继承的事情,如果TbSale和TbRefund是两个不同的类也没有继承关系。
如果要把TbSale和TbRefund用继承来做,那么由于它们对应两张表并且没有一个父表,所以只能是“每个具体类一张表”(需要写一个共用的接口),从其他对象到这个继承树的关联也只能用any映射来做; 如果是“每棵类继承树使用一个表”或者“每个子类一个表”,那么他们是同一个表或者有同一个父表,外键可以关联到同一个表或者父表,倒是可以用多对一来关联。 总之,一个外键到多个表的关联只能用any来映射。 另外,在这两个表里各放一个金额字段不行吗?如果要保持现在的表结构,那么用any映射可以解决你的问题,hibernate参考中有介绍。 |
|
返回顶楼 | |
发表时间:2007-06-08
从目前来看,分了具体类,也只是字段不同,所以可以考虑不分
分的话,因为字段数量都一致,可以共用一个表 |
|
返回顶楼 | |