`

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高级

分享到:
评论

相关推荐

    SpringDataJPA进阶:Specification动态查询深度解析.pdf

    文档支持目录章节跳转同时还支持阅读器左侧大纲显示和章节快速定位,文档内容完整、条理清晰。文档内所有文字、图表、函数、目录等元素均显示正常,无任何异常情况,敬请您放心查阅与使用。文档仅供学习参考,请勿...

    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)的开发工作。...

    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 概述及下载

    JPA(Java Persistence API)是Java EE 5.0平台标准的ORM(Object-Relational Mapping,对象关系映射)规范,用于简化Java应用中的数据持久化操作。JPA被设计为易于使用且具有良好的伸缩性,它得到了所有Java EE...

    jpa 全面学习资料

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

    spring data jpa入门实例

    【Spring Data JPA 入门实例】 Spring Data JPA 是 Spring 框架的一个模块,它简化了数据库访问层(DAO)的开发,通过提供自动化的 Repository 实现,使得开发者无需编写大量的 CRUD(创建、读取、更新、删除)代码...

Global site tag (gtag.js) - Google Analytics