`
terry_yip
  • 浏览: 38761 次
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

求一种Hibernate的对象的关系的设计

阅读更多
现在有一个TbFinancial的VO,存入账出账的记录

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经验的朋友,看看怎么解决,谢谢.
分享到:
评论
5 楼 deafwolf 2007-06-08  
从目前来看,分了具体类,也只是字段不同,所以可以考虑不分
分的话,因为字段数量都一致,可以共用一个表
4 楼 lujh99 2007-06-08  
这不是继承的事情,如果TbSale和TbRefund是两个不同的类也没有继承关系。

如果要把TbSale和TbRefund用继承来做,那么由于它们对应两张表并且没有一个父表,所以只能是“每个具体类一张表”(需要写一个共用的接口),从其他对象到这个继承树的关联也只能用any映射来做;
如果是“每棵类继承树使用一个表”或者“每个子类一个表”,那么他们是同一个表或者有同一个父表,外键可以关联到同一个表或者父表,倒是可以用多对一来关联。
总之,一个外键到多个表的关联只能用any来映射。

另外,在这两个表里各放一个金额字段不行吗?如果要保持现在的表结构,那么用any映射可以解决你的问题,hibernate参考中有介绍。
3 楼 deafwolf 2007-06-08  
1.去看hibernate里继承那一章
2.用不用继承,都应该是一对一,不过可以配成多对一来使用延迟加载
3.使用了hibernate,仍然可以按以前的方式处理,不一定非得分两种对象,关键是有没有必要
2 楼 cskysnew 2007-06-08  
感觉lz的TbFinancial包括两种不同的对象,似乎在设计上存在问题,建议还是把两种对象分开放在两个不同的数据表中。
1 楼 lujh99 2007-06-07  
这似乎是any映射的极好的应用场景。

相关推荐

    hibernate中的对象关系模型

    在Java持久化框架Hibernate中,对象关系模型(Object-Relational Mapping,ORM)是将数据库中的数据映射到Java对象的技术。它使得开发者能够用面向对象的方式来操作数据库,简化了数据库编程的过程。以下是对...

    hibernate一对一关联关系

    在Java开发中,Hibernate是一个非常流行的ORM(对象关系映射)框架,它允许开发者将数据库操作转换为面向对象的方式,从而简化了数据访问。在实体类之间,Hibernate支持多种关联关系,包括一对一(One-to-One)、一...

    hibernate的对应关系

    在Hibernate框架中,一对一(One-to-One)映射是一种常见的对象关系映射方式,它表示两个实体类之间存在一个唯一的对应关系。例如,一个用户只有一个身份证,或者一辆车只有一个车牌。下面我们将详细讨论如何在...

    精通Hibernate:Java对象持久化详解.zip

    Hibernate作为一款强大的对象关系映射(ORM)框架,极大地简化了Java应用中的数据库操作,使得开发者能够更专注于业务逻辑而不是繁琐的SQL代码。 在Java开发中,持久化是将应用程序中的对象状态保存到持久存储介质...

    Hibernate 对象持久化

    Hibernate作为一种强大的ORM(对象关系映射)框架,极大地简化了Java应用与数据库之间的交互。它通过将Java类映射到数据库表,实现了对象持久化,使得开发者可以像操作普通Java对象一样处理数据库中的数据,从而降低...

    hibernate对应关系详解

    本文将深入探讨Hibernate中的九种对象关系映射策略,并结合数据库表结构设计进行详细解析。 1. **一对一(One-to-One)**:在数据库中,两个实体之间可能存在一对一的关系,比如一个人只有一个身份证。在Hibernate...

    JPA和Hibernate的关系

    Hibernate的核心设计理念是尽可能地将对象模型与关系模型进行映射,以最小化开发者的工作量。它能够自动处理对象的持久化、查询和事务管理等操作,从而极大地提高了开发效率。 #### 三、JPA与Hibernate的关系 1. *...

    Hibernate数据持久层框架是一种Java语言下的对象关系映射解决方案.rar

    Hibernate 是一种Java语言下的对象关系映射解决方案。 它是使用GNU宽通用公共许可证发行的自由、开源的软件。它为面向对象的领域模型到传统的关系型数据库的映射,提供了一个使用方便的框架。Hibernate也是目前Java...

    Hibernate实体层设计

    在Java企业级应用开发中,持久化层的处理是一个至关重要的环节,而Hibernate作为一款强大的对象关系映射(ORM)框架,极大地简化了数据库操作。本资料主要探讨的是如何利用Hibernate进行高效且灵活的实体层设计。 ...

    hibernate关联关系总结

    本篇将深入探讨Hibernate的四种主要关联关系:一对一(OneToOne)、一对多(OneToMany)、多对一(ManyToOne)和多对多(ManyToMany),并结合实例来阐述每种关系的配置和使用。 1. **一对一关联(OneToOne)** 一...

    Hibernate教程05_关系映射之一对一双向外键关联

    Hibernate作为Java中广泛使用的对象关系映射(ORM)框架,提供了便捷的方式来管理这种关系。 首先,让我们理解“一对一”关联的概念。在数据库设计中,当两个表之间存在一对一的关系,即每个表的记录最多只能与另一...

    精通Hibernate:Java对象持久化技术详解

    Hibernate作为ORM(对象关系映射)框架,通过提供一种面向对象的方式来处理数据库操作,极大地降低了数据访问层的复杂性。 Hibernate的核心特性包括: 1. **对象关系映射**:Hibernate通过XML配置或注解方式,将...

    hibernate数据库访问接口设计

    Hibernate 是一个开源的对象关系映射(ORM)框架,它允许Java开发者使用面向对象的方式来操作数据库。在 Hibernate 中,数据库访问接口的设计是至关重要的,因为它提供了与数据库交互的桥梁,简化了传统的 JDBC 编程...

    hibernate程序设计

    - Hibernate是一个开源的Java平台上的对象关系映射(ORM)框架,它允许开发人员将Java对象与关系数据库之间的映射工作自动化,从而简化了数据库操作。 - ORM的核心理念是将面向对象的编程模型与关系型数据库的数据...

    Hibernate个人博客设计与实现

    除了传统的SQL查询,Hibernate还提供了一种更面向对象的Criteria查询,允许开发者通过构建Criteria对象来执行数据库查询,更加灵活且易于维护。 5. **HQL(Hibernate Query Language)** Hibernate有自己的查询...

    开源对象关系映射框架Hibernate知识培训

    对象关系映射(Object-Relational Mapping,简称ORM)是一种编程技术,它允许开发人员使用面向对象的方式来操作数据库,通过在对象模型和关系数据库之间建立映射,减少了数据库操作的复杂性。ORM的核心思想是将...

    设计模式,hibernate电子书

    在IT行业中,设计模式是一种被广泛认可的解决软件设计中常见问题的最佳实践。它们是经过时间验证的解决方案模板,可以在不同的上下文中重复使用,以提高代码的可读性、可维护性和灵活性。Java设计模式是面向对象编程...

Global site tag (gtag.js) - Google Analytics