“冲突”问题发生在将旧有项目进行充血模型改造的过程。我们给原有Bean的set方法中加入了业务逻辑(如上下文状态改变,事件触发等)。接下来程序的执行出问题了,症状五花八门但常常都是不可重现的问题。
通过好一番的代码走查,终于发现(意识到)Hibernate对于Bean的加载时,默认属性值的传递是使用bean的set方法的,这个时候触发了多余的业务逻辑处理。换句话说,这时候的充血模型与Hibernate的Bean加载“冲突"了。
解决"冲突"的方法很简单,将Bean配置为直接的属性访问(acess=feild)。
这样的Bug有时候是隐藏得比较深的。因为大部分的set方法是没有业务逻辑的,而且Hibernate的save行为发生在session.close的时候,如果一个bean在加载的时候,通过set方法隐形改变了另外一个Bean的状态,这时候session.close,就会把这种修改“悄悄的”保存,而不被程序员发觉。因为从业务代码上,程序只是读取了一个bean,没有做任何的修改动作,我的天~~~血泪教训啊!
希望看到这个帖子的同学,大家告诉大家!
分享到:
- 2009-03-10 12:44
- 浏览 1605
- 评论(5)
- 论坛回复 / 浏览 (5 / 2249)
- 查看更多
相关推荐
在2010年的更新中,博主可能讨论了如何在实际项目中应用充血模型,可能涉及到以下几点: 1. **业务逻辑封装**:在充血模型中,业务逻辑被封装在领域对象内部,这样可以保持对象的状态完整性和行为一致性。比如,一...
Hibernate是一款强大的对象关系映射(ORM)框架,它极大地简化了Java应用与数据库之间的交互。本文将详细探讨hibernate4.jar的核心功能,以及如何利用它来构建一个完整的Hibernate框架。 首先,`hibernate4.jar`是...
hibernate-validator 5.3.5.Final jar包 ;desc:if you want validator your project
关联一个hibernate、webLogic的一个文档,可以快速的查找关于hibernate和weblogic的冲突
项目配置:Hibernate3.3.2+Spring3.0+Struts2.2.3 + ext3.4.0,真实项目实现,项目中可参考经典权限设计,通用数据录入,批量数据处理(poi),统一的JSON格式封装,灵活的组合模式设计,EXTJS面向组件编程参考......
6. **HQL与Criteria查询**:Hibernate支持使用Hibernate Query Language(HQL)进行对象级别的查询,类似于SQL但面向对象。此外,还有Criteria API,提供了一种类型安全的查询方式。 7. **事务管理**:在处理数据库...
通过阅读《Hibernate入门 - 第二版》,初学者可以快速掌握Hibernate的基本使用,而有一定经验的开发者则能进一步提升自己的ORM技能,更好地在实际项目中运用Hibernate。提供的PDF文件“Apress.Beginning.Hibernate....
在开发Java Web应用程序时,Spring和...通过以上步骤和策略,大多数Spring与Hibernate的包冲突问题都可以得到解决。在实际开发过程中,应始终关注框架的新版本和官方文档,以便获取最新的兼容性和最佳实践信息。
Hibernate3 是一个非常重要的Java持久化框架,它允许开发者将对象模型与数据库关系模型进行映射,从而简化了数据存取的过程。这个压缩包“hibernate3必要jar包”显然是针对Hibernate3版本的,已经去除了冗余的库文件...
提供的RAR文件“Struts2.1 Core与Hibernate3.3冲突解决【去jar】”应该包含了整个解决过程中的相关文件,包括可能需要移除的jar文件、更新后的库以及可能的配置示例。开发者可以根据实际情况参考这个文件包来解决...
总的来说,处理Spring与Hibernate的包冲突需要对Java项目的构建系统有深入理解,熟悉Maven或Gradle的依赖管理,以及对Spring和Hibernate的工作原理有清晰的认识。通过合理的配置管理和版本控制,可以有效地避免和...
标题“hibernate与mybatis一起使用取长补短”暗示了在一个项目中同时采用这两种框架,旨在充分利用它们各自的优点,以提升项目的性能和灵活性。 Hibernate是一款强大的ORM框架,它提供了完整的对象模型支持,包括...
Hibernate 提供了一种将Java对象模型与关系数据库之间的映射机制,使得开发者可以使用面向对象的方式来操作数据库,而无需关心底层SQL语句。理解ORM的概念是学习Hibernate的第一步。 2. **Hibernate配置**: 在...
Hibernate 3.6 是一个流行的Java对象关系映射(ORM)框架的重要版本,它极大地简化了数据库操作,将复杂的SQL语句与Java对象之间建立了桥梁。在这个版本中,Hibernate提供了许多增强的功能和优化,旨在提高开发效率...
8. **一对多、多对一、一对一和多对多关系映射**: Hibernate支持多种关联关系映射,便于处理复杂的数据模型。 9. **延迟加载(Lazy Loading)**: Hibernate提供懒加载机制,只有在真正需要访问关联对象时才会执行...
【hibernate项目】是一个基于Java的开源对象关系映射(ORM)框架,它简化了数据库与Java应用程序之间的数据交互。Hibernate提供了一种在Java应用中管理关系数据库模型的机制,使得开发人员可以使用面向对象的编程...
hibernate-commons-annotations-4.0.1.Final.jar
8. 动态模型:Hibernate支持动态模型,允许在运行时定义实体类,增强了代码的灵活性。 在" HibernateAPI_ORG "这个资源中,可能包含以下内容: - API文档:详细说明了每个类、接口和方法的功能和使用方式,是...
1. **Hibernate概述**:Hibernate提供了一种在Java应用程序中持久化对象的机制,通过将对象模型转换为关系数据模型,使得开发者可以专注于业务逻辑而不是底层的数据库操作。 2. **安装与配置**:文档详细解释了如何...
Hibernate 是一个开源的对象关系映射(ORM)框架,它允许开发者使用面向对象的编程模型来操作关系数据库。这个“hibernate帮助文档”包含了丰富的信息,帮助开发者理解和使用Hibernate进行数据库交互。 在文档的...