Hibernate继承策略选择:优化多态与性能

需积分: 10 0 下载量 13 浏览量 更新于2024-08-18 收藏 1.61MB PPT 举报
本篇讲座深入探讨了在使用Hibernate进行Java应用程序的ORM(对象/关系映射)时,不同继承策略的选择及其背后的原理。首先,讲解了几个基本的继承策略: 1. **Table-per-concrete-class**:适用于不需要多态查询的场景,即每个子类对应数据库中的一个单独表。这种策略适合属性差异不大的子类。 2. **Table-per-class-hierarchy**:当子类间的属性差异较小,且需要支持多态查询时,推荐使用此策略,它将共享的父类属性放在一个表中,子类特有的属性单独存储。 3. **Table-per-subclass**:针对子类属性差异非常大的情况,每个子类都有自己的表,这虽然解决了数据独立性问题,但可能导致复杂性和维护成本增加,需谨慎选择。 讲座强调了实践经验中的最佳实践,通常情况下,倾向于使用**table-per-class-hierarchy**,因为它在大多数情况下提供了足够的灵活性。然而,table-per-subclass在处理大量具有显著属性差异的子类时可能更为合适,但需要根据具体项目需求权衡利弊。 讲师赵青从持久层的概念出发,解释了为什么在许多应用中仅使用数据库并不能自动构成“持久层”,因为持久层不仅涉及数据存取,还包括业务逻辑的分离和封装。他通过网上商城购物结算的例子,揭示了没有持久层的缺点,如业务逻辑与数据库访问逻辑混合、业务规则变动引发的维护困难以及开发效率降低等。 引入持久层后,系统架构得到改良,比如引入DAO(Data Access Object,数据访问对象)模式,将数据库访问逻辑抽象到DAO中,DomainObject(领域对象)则封装业务规则,使得业务逻辑清晰,开发人员可以根据专业分工进行工作。DAO模式的优势在于它隐藏了底层细节,降低了代码耦合度,使得业务层和持久层能够独立演化,提高了系统的可维护性和扩展性。 总结来说,选择合适的继承策略是Hibernate开发过程中至关重要的决策,需根据项目的特性和需求来平衡性能、可维护性和扩展性。理解并运用这些策略可以帮助开发者更有效地利用Hibernate进行对象关系映射,提升软件质量。