如何判定两个实体对象是否相等?
站在数据库的角度,我们认为在一个库表结构中,主键可以唯一确定一条记录,那么对于拥有同样主键值的实体对象,则认为他们等同。
在持久层之外,对象是否相等也遵循着特定领域中的逻辑规则
问题:
TUser user = (TUser)session.load(TUser.class,new Integer);
TAddress addr1 = new TAddress();
addr1.setAddress("Shanghai");
TAddress addr2 = new TAddress();
addr2.setAddress("Guangdong");
user.getAddresses().add(addr1);//addr1.id=null;
user.getAddresses().add(addr2);//addr2.id=null;
System.out.println("Items in set : " + user.getAddresses().size());
主键值生成机制,id只有在Session.save()方法执行之后才会被设置。
解决方法:
1、不覆盖equals/hashCode方法的情况下将面临:实体对象的跨Session识别。包含了两个针对同一库表记录的实体,当 Session.save时,将得到一个NonUniqueObjectException异常。只是用一个session实例可避免。
2、实现值比对:只需针对实体类的属性进行处理,而不要设计实体类所关联的集合类的比对,否则在多对多关系中很容易引发一些其它的问题。
3,业务关键信息判定: 值比对的一个子集。
分享到:
相关推荐
#### Hibernate持久化实现 在深入探讨Hibernate的高级特性之前,我们先回顾一下基础概念:Hibernate是一种对象关系映射(Object-Relational Mapping, ORM)框架,它能够将Java对象映射到数据库表,并提供了一系列...
4. **生成持久化代码**: 反向工程还会生成基于这些实体的Hibernate配置文件(hbm.xml或使用注解的方式),定义了表与类之间的映射关系。 接下来,视频会涵盖CRUD(创建、读取、更新、删除)操作,这是任何数据库...
- **实体**:定义 Hibernate 中的基本映射单位——实体。 - **标识符**:说明如何配置实体的主键生成策略。 - **乐观锁定属性**:配置乐观锁定字段以支持并发控制。 - **属性**:定义实体的属性及其映射。 - **嵌入...
在IT行业中,数据库管理和持久化层的设计是至关重要的环节。Middlegen与Hibernate这两个工具,正是为了解决这些问题而生。Middlegen-Hibernate-r5.rar这个压缩包,蕴含了关于这两个工具的最新版本资源,为我们提供了...
当一个瞬时态对象通过Session的save()、saveOrUpdate()或load()方法被持久化后,它就进入了持久态。此时,对象与数据库建立了关联,对象的任何改变都会在Session提交时同步到数据库。在持久态下,如果对象被删除,...
7. **实体状态与生命周期**: Hibernate识别四种实体状态:瞬时、持久化、托管和脱管。理解这些状态以及如何在它们之间转换对于有效使用框架至关重要。 8. **实体监听器**: 可以通过实现Hibernate的事件监听接口,如...
其中,“hibernate-annotations-3.4.0.CR1”是重要的子模块之一,它是Hibernate注解API的组成部分,允许开发者在实体类上使用注解来定义数据表和字段的映射,从而实现对象模型到数据库模式的映射。 一、Hibernate...
- **第一个类**:介绍了创建第一个Hibernate应用程序所需的最基本元素——定义一个持久化类。 - **映射文件**:阐述如何通过XML映射文件来描述类与数据库表之间的关系。 - **Hibernate配置**:讲解配置文件的设置,...
JPA简化了数据库操作,通过注解或XML配置,可以轻松实现对象与数据库表的映射。 2. **JPA 体系架构** JPA体系架构主要包含以下组件: - **Persistence Provider**: 提供JPA的具体实现,如Hibernate、EclipseLink...
- **架构实现**:选择了SSH框架(Struts、Hibernate、Spring)来实现三层架构,各框架负责不同的职责,如Struts处理页面和请求,Hibernate管理数据持久化,Spring协调组件。 实验报告通过这个案例展示了软件设计与...
在这个电子宠物应用中,Hibernate可能会用于用户数据、宠物数据等的持久化操作,包括CRUD(创建、读取、更新、删除)操作。开发者可以学习到如何创建实体类,编写Hibernate配置文件,以及使用Session进行数据库交互...
Java EJB中有、无状态SessionBean的两个例子 两个例子,无状态SessionBean可会话Bean必须实现SessionBean,获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,计算利息等;在有状态SessionBean中,用...