Java EJB Persistence(二):双向对象关系映射
142 浏览量
更新于2024-09-03
收藏 46KB DOC 举报
"Java标准版的EJB Persistence(二) - 双向关系与实体管理"
在Java标准版的EJB Persistence系列教程的第二部分,我们深入探讨了如何处理对象之间的双向关系。在上一部分中,我们介绍了使用EJB3 Persistence(现称为Java Persistence API,JPA)的基本概念,通过Hibernate的EntityManager和Annotations将Person和Address类持久化到嵌入式的HSQLDB数据库。然而,那时的关系是一个单向关系,即Person类持有一个Address实例,但Address并不知道它被哪个Person使用。
双向关系在此刻变得重要,因为现实世界中的模型往往需要两个关联实体都能相互引用。为了实现这种关系,我们在Address类中添加了一个Set<Person>类型的residents属性,用于存储居住在该地址的所有Person对象。接着,我们使用了@OneToMany注解来定义这个一对多的关系,允许Address对象访问其居民:
```java
@OneToMany
public Set<Person> getResidents() { return residents; }
public void setResidents(Set<Person> residents) { this.residents = residents; }
```
在将Person对象关联到Address时,我们需要确保在保存Person的同时更新Address的居民列表,防止出现数据不一致。然而,如果不正确地处理这种情况,可能会遇到“懒加载初始化”(lazy initialization)异常。这是因为默认情况下,JPA只在需要时才加载关联的集合,即在访问集合属性时。如果对象已经被EntityManager从会话中分离,尝试访问这个集合时就会触发懒加载,但此时已经无法执行数据库查询,导致异常。
为了避免这种问题,我们需要确保在将对象持久化或更新时,同时处理关联的集合。这可以通过在EntityManager的事务中执行以下操作来完成:
```java
Person p = new Person();
p.setName("John Doe");
p.setAddress(address);
entityManager.persist(p); // 先保存Person
// 在同一个事务中,确保Address的居民集合也被更新
address.getResidents().add(p);
entityManager.merge(address); // 更新Address,添加新的居民
```
在上面的代码中,我们首先保存了新创建的Person对象,然后将其添加到Address的居民集合中,并调用`entityManager.merge(address)`来同步数据库中的Address记录。这样,我们就建立了Person与Address之间的双向关系,并确保了数据的一致性。
双向关系在处理复杂业务逻辑时非常有用,它允许我们从任一端轻松地导航关系。然而,需要注意的是,双向关系可能会增加代码的复杂性,需要更小心地管理内存中的对象状态和数据库的同步。在实际应用中,根据具体需求权衡单向与双向关系的使用是非常重要的。
总结来说,本教程的第二部分主要介绍了如何在Java Persistence API中处理双向关系,以及如何避免懒加载初始化错误。通过理解和实践这些概念,开发者可以更有效地设计和实现数据模型,从而更好地满足业务需求。
2020-03-04 上传
2020-03-04 上传
2023-07-27 上传
2023-05-18 上传
2023-05-31 上传
2023-05-21 上传
2023-05-30 上传
2023-12-31 上传
2023-04-05 上传
weixin_38686231
- 粉丝: 10
- 资源: 917
最新资源
- 磁性吸附笔筒设计创新,行业文档精选
- Java Swing实现的俄罗斯方块游戏代码分享
- 骨折生长的二维与三维模型比较分析
- 水彩花卉与羽毛无缝背景矢量素材
- 设计一种高效的袋料分离装置
- 探索4.20图包.zip的奥秘
- RabbitMQ 3.7.x延时消息交换插件安装与操作指南
- 解决NLTK下载停用词失败的问题
- 多系统平台的并行处理技术研究
- Jekyll项目实战:网页设计作业的入门练习
- discord.js v13按钮分页包实现教程与应用
- SpringBoot与Uniapp结合开发短视频APP实战教程
- Tensorflow学习笔记深度解析:人工智能实践指南
- 无服务器部署管理器:防止错误部署AWS帐户
- 医疗图标矢量素材合集:扁平风格16图标(PNG/EPS/PSD)
- 人工智能基础课程汇报PPT模板下载