原文链接:http://blog.csdn.net/han_yankun2009/article/details/45395271
上篇咱们简单介绍了JPA EntityManager的基本操作,咱们今天接着,更深一层次的介绍EntityManager。
1级联操作
2实体状态
3 数据同步
1 级联操作
1.1 持久化带关系和实体
上次,我们只是持久了一个客户实体,如果创建客户的时候,同样持久化客户所对应的地址实体,如何操作呢?JPA中提供了多种持久化带关系的实体
首先看以下客户与地址的关系
代码
- Publicclass Customer implemets Serializable
- {
- //级联持久化
- @OneToOne(cascade = CascadeType.PERSIST)
- Private Address address;
- }
Cascade ,当调用persist方法持久化客户实体时
cascade = CascadeType.PERSIST,客户所关联的实体也自动时就化
持久化客户实体
- customer.setAddress(address);
- em.persist(customer);
这样,只需要持久化客户实体,对应固定实体也将自动持久化了,而不需要持久化两次
实体属性及加载方式
实体一旦通过find方法查询后,实体的属性可以有两种方式加载,分别是即时加载(EAGER)和惰性加载(LAZY),
fetch = FetchType.ELAZY懒加载
fetch = FetchType.EAGER即时加载
对于LAZY加载,只有当使用该实体属性时,才执行查询的SQl,将属性加载进来,如果不显示的调用,该属性用于也不会加载到客户实体中,而且当该实体具有多条数据,使用懒加载,容易造成频繁访问数据库,出现 N+1问题。若数据量少,该方式还是一个很好的选择,若以一种方式没有绝对的好或不好
1.2 更新实体关系
前面我们说道持久化带关系的实体内容时,了解到通过设置实体关系级联属性cascade可以调用persist方法自动持久化实体关系,同样对于更新实体锁对应关系,也是使用的。 merge方法同时更新实体对应的关系实体
- Publicclass Customer implemets Serializable
- {
- //级联更新设置
- @OneToOne(cascade = CascadeType.MERGE)
- Private Address address;
- }
此时客户端可以通过首先查找客户实体,通过get或set方式对地址实体进行修改,即可实现客户地址的修正。
- Cusetomer customer = cuseomerBean.findById("UUID");
- customer.geteAddress.setZip("056000");
- cuseomerBean.updateEntity(customer);
当调用merge方法,实体管理器不仅检查客户实体是否修改i啊,也检查锁关联的地址实体,若为瞬时态,自动持久化,然后保存,若为托管,则更新到数据中。例如:新创建一个地址实体,也是可以持久化的
- Cusetomer customer = cuseomerBean.findById("UUID");
- Address address = new Address();
- address.setZip("056000");
- customer.setAddress(address);
- cuseomerBean.updateEntity(customer);
方法操作的背后还是要看现象的,不然理解起来不知所然呀
2 实体状态
一个实体从创建到销毁经历了多个状态,EntityManager是如果管理这些实体的,现在咱们就揭开这个面纱吧
通常有这样几个状态 瞬时态(transient),托管(managed)以及销毁(Removed),与Hibernate大相径庭
举例说明:
瞬时态:对象未保存数据库中,通过NEW对象,在内存中,为持久化
持久态:相对瞬时态,调用persist,保存在数据库中
托管态(Managed):是由上下文(persistence Contexgts)管理,是实体处于上下文可被管理的范围内。
游离太:相对托管态,实体不在上下文中时,处于游离态,
游离太情况:
- 事务结束,实体超出作用域
- 复制实体或序列化,实体处于游离态
- 调用clear,是有实体都处于游离态
销毁态
实体从数据库中删除后,处于销毁状态,但必须是在托管状态下删除,否则抛出异常
3 数据同步
也许你会认为,当调用persist,merge或mremove方法时,就已经将实体保存到数据库中,但事实并不是这样的,这些方法知识改变了实体所处的状态,最终保存到数据库中,使用的是flush方法
何时使用该方法何时呢,这需要了解flush提交的方式,默认是
AUTO自动调教,实体管理器根据事务结束后,会调用flush方法,
设置模式是
- Publicenum FLushModeType{
- AUTO;
- COMMIT
- }
总结:
认识了实体管理器的级联操作和生命周期管理后,对期有了基本的概念,同时对一些关系的设置也有了感官,整体上有了一个提升,JPA EntityManager高级
相关推荐
**Spring Data JPA 深度解析** Spring Data JPA 是 Spring Framework 的一个重要模块,它为 Java Persistence API (JPA) 提供了便捷的数据访问层。这个框架简化了数据库操作,使得开发人员能够以声明式的方式处理...
**Java Persistence API (JPA)** 是Java平台上的一个标准,用于管理关系数据库中的对象-关系映射(ORM)。它提供了一种方式,让开发者可以用面向对象的编程模型来操作数据库,而无需直接编写SQL语句。JPA允许你在...
### Spring-data-jpa 的核心知识点解析 #### 一、Spring-data-jpa 基本介绍 Spring-data-jpa 是 Spring 家族中的一个重要成员,它主要用于简化基于 Java Persistence API (JPA) 的数据访问层(DAO)的开发工作。...
《Spring Data JPA从入门到精通》是一本深入解析Spring Data JPA的书籍,它以Spring Boot框架为核心,旨在帮助读者全面理解并熟练运用Spring Data JPA进行数据库操作。Spring Data JPA是Spring Framework的一个模块...
**JPA的进阶特性:** 1. **懒加载(Lazy Loading)**:允许延迟加载关联对象,直到真正需要时才从数据库加载,提高性能。 2. **级联操作(Cascading)**:一个实体的操作会影响到与之关联的其他实体。 3. **事件监听...
本篇文章主要关注Spring Data JPA在项目中的核心场景与进阶用法,旨在帮助开发者更高效地利用这个框架。 首先,Repository 是Spring Data JPA的核心组件,它为数据访问提供了一种声明式的方法。Repository接口层级...
**JPA(Java Persistence API)**是Java平台上的一个标准,用于管理关系数据库中的数据,它简化了在Java应用程序中存储、检索和管理对象的工作。JPA是Java EE和Java SE环境中的一种ORM(Object-Relational Mapping)...
**Java Persistence API (JPA)** 是Java平台上的一个标准,用于管理关系数据库中的数据。它为Java开发者提供了一种对象关系映射(ORM)机制,将业务对象与数据库表进行映射,使得开发者可以使用面向对象的方式来操作...
尚硅谷的JPA.pptx文件可能包含关于这些概念的详细讲解和示例,而jpa-1和jpa-2可能是视频课程的分章节内容,涵盖了JPA的基础知识和进阶技巧。通过学习这些资源,开发者可以更好地理解和运用JPA,提升其在实际项目中的...
他提供的**JPA视频课程**涵盖了JPA的基础到进阶内容,通过15个avi视频,深入浅出地讲解了JPA的用法和最佳实践。 这个压缩包包含的项目和文件有以下作用: 1. **JPACompositePK**:这是一个示例项目,展示了如何在...
**Spring Data JPA** 是一个基于 **Java** 的开源框架,它是 **Spring Framework** 的一个模块,主要用于简化 **Java Persistence API (JPA)** 的使用。JPA 是 Java 平台上的一个标准,用于管理和持久化应用程序的...
Spring框架的核心特性包括依赖注入(DI)和面向切面编程(AOP),并且它还提供了对数据库操作的支持,这主要通过Spring Data JPA和Java Persistence API(JPA)实现。 Spring注解是Spring框架中的一大特色,它极大...
Java Persistence API(JPA)是Java平台上的一个标准,用于管理关系数据库中的对象持久化。它简化了在Java应用程序中存储、检索和管理数据的过程,是Enterprise JavaBeans(EJB)的一部分,也是Spring框架中的一个...
Spring Data JPA 是一个强大的框架,它简化了Java应用程序与数据库之间的交互,是Spring生态中的重要组成部分。通过使用Spring Data JPA,开发者可以避免编写大量的JPA(Java Persistence API)和SQL代码,专注于...
《Pro JPA2:精通Java™ Persistence API》是一本由Mike Keith和Merrick Schincariol撰写的关于Java持久化API(JPA)的权威指南。本书深入探讨了JPA2,即Java Persistence API的第二版,是Java EE 6标准的一部分。...
Spring Data JPA API。 Spring Data JPA 开发文档。 官网 Spring Data JPA API。
**Java Persistence API (JPA)** 是Java平台上的一个标准,用于管理关系数据库中的数据,它为开发者提供了一种对象/关系映射...通过这些学习资料,开发者可以从基础到进阶全面掌握JPA,实现高效且灵活的数据库操作。