`

JPA EntitManager进阶

 
阅读更多

原文链接:http://blog.csdn.net/han_yankun2009/article/details/45395271

上篇咱们简单介绍了JPA EntityManager的基本操作咱们今天接着,更深一层次的介绍EntityManager


 

1级联操作

2实体状态

数据同步

 

级联操作 

 

 1.1 持久化带关系和实体

 

 上次,我们只是持久了一个客户实体,如果创建客户的时候,同样持久化客户所对应的地址实体,如何操作呢?JPA中提供了多种持久化带关系的实体

 

首先看以下客户与地址的关系

 

 

 

代码

 

  1. Publicclass Customer implemets Serializable  
  2. {  
  3. //级联持久化  
  4. @OneToOne(cascade = CascadeType.PERSIST)  
  5. Private  Address address;  
  6.    
  7. }  

 

Cascade ,当调用persist方法持久化客户实体时

 

cascade = CascadeType.PERSIST,客户所关联的实体也自动时就化

 


 

  持久化客户实体

 


 

  1. customer.setAddress(address);  
  2. em.persist(customer);  

 

这样,只需要持久化客户实体,对应固定实体也将自动持久化了,而不需要持久化两次

 

 

 

实体属性及加载方式

 

实体一旦通过find方法查询后,实体的属性可以有两种方式加载,分别是即时加载(EAGER)和惰性加载(LAZY,

 


 

fetch = FetchType.ELAZY懒加载

 

fetch = FetchType.EAGER即时加载

 


 

对于LAZY加载,只有当使用该实体属性时,才执行查询的SQl,将属性加载进来,如果不显示的调用,该属性用于也不会加载到客户实体中,而且当该实体具有多条数据,使用懒加载,容易造成频繁访问数据库,出现 N+1问题。若数据量少,该方式还是一个很好的选择,若以一种方式没有绝对的好或不好

 

 

 

1.2 更新实体关系

 

 

 

前面我们说道持久化带关系的实体内容时,了解到通过设置实体关系级联属性cascade可以调用persist方法自动持久化实体关系,同样对于更新实体锁对应关系,也是使用的。 merge方法同时更新实体对应的关系实体

 

 

 

  1. Publicclass Customer implemets Serializable  
  2. {  
  3. //级联更新设置  
  4. @OneToOne(cascade = CascadeType.MERGE)  
  5. Private  Address address;  
  6.    
  7. }  

 

此时客户端可以通过首先查找客户实体,通过getset方式对地址实体进行修改,即可实现客户地址的修正。

 

 

 

  1. Cusetomer customer = cuseomerBean.findById("UUID");  
  2. customer.geteAddress.setZip("056000");  
  3. cuseomerBean.updateEntity(customer);  

 

当调用merge方法,实体管理器不仅检查客户实体是否修改i啊,也检查锁关联的地址实体,若为瞬时态,自动持久化,然后保存,若为托管,则更新到数据中。例如:新创建一个地址实体,也是可以持久化的

 

  1.  Cusetomer customer = cuseomerBean.findById("UUID");  
  2. Address address = new Address();  
  3. address.setZip("056000");  
  4. customer.setAddress(address);  
  5. cuseomerBean.updateEntity(customer);  

 

方法操作的背后还是要看现象的,不然理解起来不知所然呀

 

 

 

2 实体状态

 

一个实体从创建到销毁经历了多个状态,EntityManager是如果管理这些实体的,现在咱们就揭开这个面纱吧

 

通常有这样几个状态 瞬时态transient),托管managed)以及销毁(Removed),与Hibernate大相径庭

 

 

 

 

 

举例说明:

 

瞬时态:对象未保存数据库中,通过NEW对象,在内存中,为持久化

 

持久态:相对瞬时态,调用persist,保存在数据库中

 

托管态(Managed):是由上下文(persistence Contexgts)管理,是实体处于上下文可被管理的范围内。

 

游离太:相对托管态,实体不在上下文中时,处于游离态,

 

   游离太情况:

 

  •  事务结束,实体超出作用域
  •  复制实体或序列化,实体处于游离态
  •   调用clear,是有实体都处于游离态

 

     销毁态

 

 实体从数据库中删除后,处于销毁状态,但必须是在托管状态下删除,否则抛出异常

 

 

 

3 数据同步

 

 也许你会认为,当调用persistmergemremove方法时,就已经将实体保存到数据库中,但事实并不是这样的,这些方法知识改变了实体所处的状态,最终保存到数据库中,使用的是flush方法

 

何时使用该方法何时呢,这需要了解flush提交的方式,默认是

 

AUTO自动调教,实体管理器根据事务结束后,会调用flush方法,

 

设置模式是

 

 

 

  1. Publicenum FLushModeType{  
  2.    
  3. AUTO;  
  4. COMMIT  
  5. }  

 

 

 

总结:

认识了实体管理器的级联操作和生命周期管理后,对期有了基本的概念,同时对一些关系的设置也有了感官,整体上有了一个提升,JPA EntityManager高级

分享到:
评论

相关推荐

    Spring Data JPA.zip

    **Spring Data JPA 深度解析** Spring Data JPA 是 Spring Framework 的一个重要模块,它为 Java Persistence API (JPA) 提供了便捷的数据访问层。这个框架简化了数据库操作,使得开发人员能够以声明式的方式处理...

    jpa例子jpajpa

    **Java Persistence API (JPA)** 是Java平台上的一个标准,用于管理关系数据库中的对象-关系映射(ORM)。它提供了一种方式,让开发者可以用面向对象的编程模型来操作数据库,而无需直接编写SQL语句。JPA允许你在...

    Spring-data-jpa常用教程.pdf

    ### Spring-data-jpa 的核心知识点解析 #### 一、Spring-data-jpa 基本介绍 Spring-data-jpa 是 Spring 家族中的一个重要成员,它主要用于简化基于 Java Persistence API (JPA) 的数据访问层(DAO)的开发工作。...

    Spring Data JPA从入门到精通

    《Spring Data JPA从入门到精通》是一本深入解析Spring Data JPA的书籍,它以Spring Boot框架为核心,旨在帮助读者全面理解并熟练运用Spring Data JPA进行数据库操作。Spring Data JPA是Spring Framework的一个模块...

    JPA.rar_jpa

    **JPA的进阶特性:** 1. **懒加载(Lazy Loading)**:允许延迟加载关联对象,直到真正需要时才从数据库加载,提高性能。 2. **级联操作(Cascading)**:一个实体的操作会影响到与之关联的其他实体。 3. **事件监听...

    Spring Data JPA系列3:JPA项目中核心场景与进阶用法介绍.doc

    本篇文章主要关注Spring Data JPA在项目中的核心场景与进阶用法,旨在帮助开发者更高效地利用这个框架。 首先,Repository 是Spring Data JPA的核心组件,它为数据访问提供了一种声明式的方法。Repository接口层级...

    JPA源文件/jpa学习

    **JPA(Java Persistence API)**是Java平台上的一个标准,用于管理关系数据库中的数据,它简化了在Java应用程序中存储、检索和管理对象的工作。JPA是Java EE和Java SE环境中的一种ORM(Object-Relational Mapping)...

    JPA教程,包括TOPLink JPA,Hibernate JPA,Open Jpa,jpa批注

    **Java Persistence API (JPA)** 是Java平台上的一个标准,用于管理关系数据库中的数据。它为Java开发者提供了一种对象关系映射(ORM)机制,将业务对象与数据库表进行映射,使得开发者可以使用面向对象的方式来操作...

    JPA讲解视频

    尚硅谷的JPA.pptx文件可能包含关于这些概念的详细讲解和示例,而jpa-1和jpa-2可能是视频课程的分章节内容,涵盖了JPA的基础知识和进阶技巧。通过学习这些资源,开发者可以更好地理解和运用JPA,提升其在实际项目中的...

    JPA 黎活明JPA视频代码

    他提供的**JPA视频课程**涵盖了JPA的基础到进阶内容,通过15个avi视频,深入浅出地讲解了JPA的用法和最佳实践。 这个压缩包包含的项目和文件有以下作用: 1. **JPACompositePK**:这是一个示例项目,展示了如何在...

    Spring Data JPA中文文档[1.4.3]_springdatajpa_erlang_waitxpf_

    **Spring Data JPA** 是一个基于 **Java** 的开源框架,它是 **Spring Framework** 的一个模块,主要用于简化 **Java Persistence API (JPA)** 的使用。JPA 是 Java 平台上的一个标准,用于管理和持久化应用程序的...

    spring注解+spring data jpa文档+JPA文档.rar

    Spring框架的核心特性包括依赖注入(DI)和面向切面编程(AOP),并且它还提供了对数据库操作的支持,这主要通过Spring Data JPA和Java Persistence API(JPA)实现。 Spring注解是Spring框架中的一大特色,它极大...

    JPA中文解释,JPA的API

    Java Persistence API(JPA)是Java平台上的一个标准,用于管理关系数据库中的对象持久化。它简化了在Java应用程序中存储、检索和管理数据的过程,是Enterprise JavaBeans(EJB)的一部分,也是Spring框架中的一个...

    JPA_官方文档_中文版

    ### JPA概述与核心知识点详解 #### 一、JPA概览 JPA,全称Java Persistence API,作为Java EE 5.0平台标准的ORM(Object-Relational Mapping)规范,旨在解决对象持久化问题,使开发人员能更轻松地在Java应用程序...

    Spring Data JPA 笔记

    Spring Data JPA 是一个强大的框架,它简化了Java应用程序与数据库之间的交互,是Spring生态中的重要组成部分。通过使用Spring Data JPA,开发者可以避免编写大量的JPA(Java Persistence API)和SQL代码,专注于...

    Pro JPA2 精通JPA2

    《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 开发文档).CHM

    Spring Data JPA API。 Spring Data JPA 开发文档。 官网 Spring Data JPA API。

    jpa 全面学习资料

    **Java Persistence API (JPA)** 是Java平台上的一个标准,用于管理关系数据库中的数据,它为开发者提供了一种对象/关系映射...通过这些学习资料,开发者可以从基础到进阶全面掌握JPA,实现高效且灵活的数据库操作。

Global site tag (gtag.js) - Google Analytics