1. 前言
虽然持久化实体的状态在ORM中是一个老生常谈的问题,但是说实在的,我们在开发过程中真的不太在意实体的状态。在Web一般情况下也都是交给Spring去管理实体管理器(EntityManager),所以我们还是有必要啰嗦一下,至于肢体的高级操作,实际上也就是实体监听器的使用而已。
2. 实体对象的状态分析
先给出经典状态图
其中画了矩形方框的代表在持久化上下文中,所谓在持久化上下文的意思就是一旦该实体对象处于该环境中的时候,那么此实体的属性发生了任何的改变都会同步到数据库中,无需再自己手工调用管理器的方法,该记录会自动同步。
瞬时状态:实际上就是new了一个普通的JavaBean对象。
托管状态:1.当瞬时对象调用了管理器的persist()后,即可将一般的JavaBean做为了持久Bean,该Bean的任何属性改动都会牵涉到数据库记录的改动。2. 一旦该记录flush到数据库之后,并且事务提交了,那么此对象不在持久化上下文中,即:变为了游离(没人管的孩子)状态了。在游离状态的时候调用更新、刷新方法后,游离状态对象就变为了在持久化上下文的托管状态了。3.通过管理器的find方法,将实体从数据库查询出来后,该实体也就变为了托管形态。
持久化状态:当处在托管状态的实体Bean被管理器flush了,那么就在极短暂的时间进入了持久化状态,事务提交之后,立刻变为了游离状态。您可以把持久化状态当做实实在在的数据库记录。
游离状态:游离状态就是提交到数据库后,事务commit后实体的状态,因为事务已经提交了,此时实体的属性任你如何改变,也不会同步到数据库,因为游离是没人管的孩子,不在持久化上下文中。
销毁对象:一般要删除一个持久化对象的时候都是先find出来,之后调用remove方法删之,此时这个对象就是销毁对象,实际上就是瞬时对象的另一种形态罢了。
1. 实体管理器高级操作——getReference()
用于查询单记录实体,和find相似
代码如下
// 加载一个实体
T entity = entityManager.getReference(entityClass, id);
|
它与find的区别就是:当根据主键查询记录不存在的时候,将抛出异常EntityNotFoundException。这样我们就可以捕获异常后做一些自己的处理。
2. 实体管理器高级操作——提交方式FlushModeType
提交(调用flush)分为2种方式:
AUTO:自动提交,实体管理器会在适当的时机同步实际记录到数据库,也是默认的提交方式。
COMMIT:一旦一个事务完毕了,那么就立刻提交到数据库(忽略事务共享、事务传播)。
很多人建议使用默认的AUTO。
3. 大量数据分批提交
有的时候我们需要循环保存数据,当保存大量数据的时候,如果到最后才提交所有数据,那么数据库的负载可能会比较大。我们可以这样做,每10个记录就提交(flush)一次。代码如下:
if(i % 10 == 0){
entityManager.flush();
}
|
每到10条记录的时候就强制提交。
4. refresh()
该方法是和flush()相反,是将数据库记录重新读到实体中,这样实体也是出于持久化环境中了,处于托管状态。
5. clear()
该方法是将所有的处于上下文中的实体全部转换成游离状态,此时还没有及时flush到数据库的信息,很遗憾,将不会持久化到数据库中。不是急于释放资源的情况下,请慎用之。
- 大小: 83.9 KB
分享到:
相关推荐
实体对象的状态管理和实体监听器的使用是JPA中非常重要的概念。通过理解和应用这些概念,开发者可以更好地控制数据的持久化过程,并实现高效、可靠的应用程序开发。无论是从数据同步的角度考虑,还是从日志记录的...
在实际应用中,JPA的关联映射不仅可以简化对象关系映射的配置,还能提供诸如级联操作(`@CascadeType`)和懒加载(`@Fetch(FetchType.LAZY)`)等高级功能,使得数据访问更加灵活和高效。 总之,JPA关联映射是理解和...
### JPA学习笔记-EJB-02JPA属性注解 #### 一、引言 在上一篇文章中,我们简要介绍了Java Persistence API (JPA)的基础知识,包括它的基本部署和操作流程,从而让我们对JPA有了初步的认识。本文将继续深入探讨JPA的...
### JPA主键生成策略详解 #### 一、概述 持久化对象的主键生成机制在JPA(Java Persistence API)中占据着重要的位置。它不仅关乎数据的唯一标识符如何确定,还与数据的存储效率及应用逻辑紧密相关。JPA通过`@...
### JPA学习文档知识点概述 #### 1. JPA简介 - **定义**: JPA (Java Persistence API) 是由Sun官方提出的一种Java持久化规范,旨在简化Java应用程序中关系型数据库的操作过程。其核心目标是统一现有的ORM (Object-...
### JPA 学习笔记详解 #### 一、JPA 概述 Java Persistence API (JPA) 是 Sun 公司提出的一种 Java 持久层标准,它为 Java 开发者提供了一种对象关系映射 (ORM) 的工具来管理 Java 应用程序中的关系型数据。JPA ...
### EJB学习笔记4:深入理解实体与JPA #### 实体的概念与作用 实体,在企业级Java开发中,特别是EJB(Enterprise JavaBeans)框架下,指的是具有持久化能力的POJO(Plain Old Java Object)类。不同于实体Bean...
### Spring 使用 JPA 的知识点详解 #### 一、Spring与JPA简介 Spring框架与Java Persistence API (JPA)的结合...通过这些知识点的学习,可以更好地理解和掌握Spring JPA的使用方法,为后续的实际开发打下坚实的基础。
2. **实体Bean (Entity Bean)**:实体Bean对应于数据库中的持久化对象,是Java持久化规范(JPA)的一部分。JPA简化了对象关系映射(ORM),使得数据库操作更加便捷。 3. **消息驱动Bean (Message-Driven Bean)**:...
**EJB3.0 学习笔记** EJB(Enterprise JavaBeans)是Java EE平台中的核心组件,用于构建可扩展的、安全的、事务处理的分布式应用程序。EJB3.0是EJB的一个重大更新,引入了许多改进,使得开发过程更为简化,降低了...
【EJB学习笔记】 EJB,全称为Enterprise Java Beans,是Java平台上的一个标准,用于开发和部署服务器端的分布式组件。它基于Java语言,为创建高效能、安全且可扩展的企业级应用提供了框架。EJB规范由Java ...
在深入探讨《ejb学习笔记》这一主题之前,我们首先需要理解什么是EJB(Enterprise JavaBeans)。EJB是Java平台为企业级应用开发提供的一套组件模型,它属于J2EE(Java 2 Platform, Enterprise Edition)的一部分,...
本资料集包含了ejb培训笔记和源代码,旨在帮助学习者深入理解EJB的工作原理及其在实际项目中的应用。 笔记部分可能涵盖以下关键知识点: 1. **EJB概述**:介绍EJB的历史、版本和基本概念,包括EJB 2.x和EJB 3.x的...
在Java EE 5及更高版本中,JPA(Java Persistence API)取代了传统的实体bean,提供了更灵活的ORM(对象关系映射)。 - **消息驱动bean(Message-Driven Beans)**:用于处理JMS(Java Message Service)消息,提供...