JPA实体有4种状态,1)新建态 2) 托管态 3)游离态 4)删除态
通过代码分别介绍这4种状态(该文基于JPA入门)
- 新建态(没有主键,不与持久化上下文关联)即new 出的对象(但不能指定id的值,若指定则是游离态而非新建态)
- 托管态(有主键,和持久化上下文关联,数据中有对应记录,不可持久化)
- 游离态(有主键,未和持久化上下文关联)
-
删除态(有主键,未持久化上下文关联,数据中有对应记录,可以持久化)(可能理解有偏差,仅供参考)
四种状态的转换图如下:
其中删除态是否在持久化上下中存在些争议,通过代码验证(基于jpa 入门):@Test public void testPersistent() { EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("mysqljpa"); EntityManager entityManager = entityManagerFactory.createEntityManager(); EntityTransaction transaction = entityManager.getTransaction(); transaction.begin(); Person person = entityManager.find(Person.class, 1); System.out.println(entityManager.contains(person));//判断是否在持久化上下文中 entityManager.remove(person); System.out.println(entityManager.contains(person));//判断是否在持久化上下文中 transaction.commit(); entityManager.close(); entityManagerFactory.close(); }
运行结果:
Hibernate: select person0_.id as id1_0_0_, person0_.name as name2_0_0_ from tb_person person0_ where person0_.id=? true false Hibernate: delete from tb_person where id=?
调用remove 方法后,contains返回false,说明未在持久化上下文中。由于此时事务未提交,且没有调用flush方法,还没有执行delete 语句。
相关推荐
jpa--6.api(EntityManager实体的状态)jpa--6.api(EntityManager实体的状态)jpa--6.api(EntityManager实体的状态)jpa--6.api(EntityManager实体的状态)
虽然持久化实体的状态在ORM中是一个老生常谈的问题,但是说实在的,我们在开发过程中真的不太在意实体的状态。在Web一般情况下也都是交给Spring去管理实体管理器(EntityManager),所以我们还是有必要啰嗦一下,...
生成JPA的实体,带annotation,包括@Entity,@Table(name=xx),@Id,@GeneratedValue,@Column(name=xx) 输出表和字段的comment,包含字段的类型长度 自动生成包名
JPA实体映射对时间字段的处理,使用的JPA比较流行
本文是 使用 Apache OpenJPA 开发 EJB 3.0 应用系列 的第五部分,介绍在 OpenJPA 中如何自动生成实体的唯一标识,包括使用容器自动生成实体标识,借助于数据库的自动编号、序列号、数据库表等技术自动生成实体标识等...
这个主要是和我发的博客的实例,但是博客的时候不知道怎么上传源码,只能单独保存了
JPA实体bean配置,jpa增删改api,jpasql增删改.pdf
JPA实体bean配置,jpa增删改api,jpasql增删改.doc
Spring Data JPA系列5:让IDEA自动帮你写JPA实体定义代码.doc
JPA访问状态(Access Mode)字段和属性及其混合访问的demo,再测试时如果出现问题,可以修改自动创建的数据表的主键为auto_increment。
JPA视频教程_使用jpa映射单个实体对象
springboot jpa 自动生成实体类的 文件 可以拿走直接用 Generate POJOs.groovy
在JPA 之前,Java EE 应用程序将持续类表示为容器管理的实体bean 。使用JPA,您可以将 任何普通的旧式Java 对象(POJO) 类指定为JPA 实体:一个应使用JPA 持续性提供程序的 服务将其非临时字段持久保存到关系数据库...
默认情况下,当应用程序第一次获取实体标识时,OpenJPA 框架从数据库中一次性获取 50 个连续的实体标识缓存起来,当下一次应用程序需要获取实体标识时,OpenJPA 将首先检测缓存中是否存在实体标识,如果存在,Open...
NULL 博文链接:https://h-z.iteye.com/blog/2157698
Maven插件,用于使用模式生成器从JPA实体生成模式或DDL脚本。 有关Gradle的信息,请参见。 当前支持 (参考实现)和 。 宣布之前... 阅读我的嘴唇; JPA DDL生成器不是银弹 有时(大多数情况下,通常是:P)JPA会...
JPA返回实体或Map及dwr分页
JPA教程JPA教程JPA教程JPA教程JPA教程
jpa jpa规范 jpa源码 jpa jpa规范 jpa源码