`
hello_world_hello
  • 浏览: 8901 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

jpa实体状态及举例

    博客分类:
  • jpa
 
阅读更多

JPA实体有4种状态,1)新建态 2) 托管态 3)游离态 4)删除态

通过代码分别介绍这4种状态(该文基于JPA入门

  1. 新建态(没有主键,不与持久化上下文关联)即new 出的对象(但不能指定id的值,若指定则是游离态而非新建态)
  2. 托管态(有主键,和持久化上下文关联,数据中有对应记录,不可持久化)

  3. 游离态(有主键,未和持久化上下文关联)

  4. 删除态(有主键,未持久化上下文关联,数据中有对应记录,可以持久化)(可能理解有偏差,仅供参考)

    四种状态的转换图如下:




     
     
     
    其中删除态是否在持久化上下中存在些争议,通过代码验证(基于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 语句。
  • 大小: 19.2 KB
分享到:
评论

相关推荐

    JPA学习笔记-EJB-05JPA实体对象状态和实体对象的高级操作

    ### JPA实体对象状态 #### 一、实体对象的状态分类 在Java Persistence API (JPA) 中,实体对象的状态管理是实现数据持久化的基础之一。根据实体对象与实体管理器(EntityManager)之间的交互关系,实体对象可以...

    Intellij Idea 数据库生成JPA实体的模板

    生成JPA的实体,带annotation,包括@Entity,@Table(name=xx),@Id,@GeneratedValue,@Column(name=xx) 输出表和字段的comment,包含字段的类型长度 自动生成包名

    jpa--6.api(EntityManager实体的状态)

    jpa--6.api(EntityManager实体的状态)jpa--6.api(EntityManager实体的状态)jpa--6.api(EntityManager实体的状态)jpa--6.api(EntityManager实体的状态)

    jpa 别名转实体

    别名转实体是JPA中的一个概念,它涉及到如何通过别名来查询数据库并映射到对应的实体类上。 在JPA中,我们经常需要处理SQL查询结果,这些结果可能包含别名,例如在HQL(Hibernate Query Language)或JPQL(Java ...

    JPA实体映射对时间字段的处理

    ### JPA实体映射对时间字段的处理 在Java持久化框架中,JPA(Java Persistence API)是一种广泛采用的标准,用于管理关系型数据库中的对象/关系映射。本文将详细探讨在使用JPA进行实体映射时如何处理时间字段,并...

    JPA实体关联(hibernate实现)

    **JPA实体关联(Hibernate实现)** Java Persistence API (JPA) 是Java平台上的一个标准,用于管理和持久化Java对象到关系数据库。它提供了一种面向对象的方式来操作数据,而Hibernate是JPA的一个流行实现。在JPA中,...

    openjpa实体标识的生成策略

    在OpenJPA中,实体标识(Entity Identifier)的生成策略是数据持久化过程中不可或缺的一部分,因为确保实体的唯一性对于数据库的正确性和一致性至关重要。OpenJPA提供了四种不同的策略来生成实体标识,使得开发者...

    jpa例子jpajpa

    它们通常带有`@Entity`注解,表明这个类是一个JPA实体。例如: ```java @Entity public class User { @Id private Long id; private String name; // getters and setters } ``` 这里的`User`类就是一个实体,`@...

    JPA核心知识讲解

    JPA 实体状态:JPA 实体有四种状态:新建、已存在、已删除、已(detached)。 JPA 实体生命周期: 1. 新建实体 2. 持久化实体 3. 更新实体 4. 删除实体 JPA 实体管理器 实体管理器(EntityManager)是 JPA 中的...

    JPA核心知识总结

    2. **JPA实体状态**:JPA定义了四种实体状态:瞬时态(Transient)、持久态(Persistent)、脱管态(Detached)和已删除态(Removed)。 3. **JPA实体生命周期**:实体从创建到销毁的过程中,状态会发生变化,JPA...

    JPA实体bean配置,jpa增删改api,jpasql增删改.pdf

    此外,`flush()`和`clear()`方法分别用于刷新缓存和清空当前实体管理器的实体状态。 在JPA环境中,配置文件通常是`persistence.xml`,它定义了持久化单元(`persistence-unit`)。在这个配置文件中,你可以设置...

    JPA访问状态

    在JPA中,访问状态(Access Mode)是指如何确定实体的字段和属性的访问方式,即字段值如何被读取和写入到数据库中。 默认情况下,JPA通过getter和setter方法来访问实体的属性,这就是所谓的`FIELD`访问模式。然而,...

    springboot jpa 自动生成实体类的 文件 Generate POJOs.groovy

    springboot jpa 自动生成实体类的 文件 可以拿走直接用 Generate POJOs.groovy

    EJB3.0-JPA实体的注解规范以及Hibernate特有的扩展

    ### EJB3.0-JPA实体的注解规范以及Hibernate特有的扩展 #### 一、概述 EJB3.0引入了一种新的编程模型,它基于Java Persistence API (JPA),使得开发人员能够更加轻松地创建企业级应用。JPA允许使用POJO(Plain Old...

    jpa的实体映射关系7种

    在Java Persistence API (JPA) 中,实体映射关系是数据库关系模型与Java对象模型之间的桥梁,用于在ORM(对象关系映射)框架下管理数据。JPA 提供了多种映射关系,使得开发者能够方便地处理不同类型的关联。下面我们...

    JPA实体bean配置,jpa增删改api,jpasql增删改.doc

    ### JPA实体Bean配置与增删改操作详解 #### 一、JPA概念与发展历程 JPA(Java Persistence API)是一种规范,它定义了如何在Java应用中管理和存储持久化对象的标准方法。JPA的发展经历了从传统的JDBC到更高级的ORM...

    JPA环境搭建及JPA实例与JPA主键生成策略

    通过以上步骤,你就成功地搭建了JPA环境,并理解了如何创建JPA实体和设置主键生成策略。继续深入学习,你将能够利用JPA的强大功能,如查询语言(JPQL)、级联操作、事务管理等,来更高效地进行数据库操作。

    13_jpa多对多双向关联实体定义与注解

    "13_传智播客JPA详解"系列教程涵盖了JPA的诸多方面,而"13_传智播客JPA详解_JPA中的多对多双向关联实体定义与注解设置"这一部分则专门聚焦于多对多关联的实践。 在关系型数据库中,多对多关联是最为复杂的一种关系...

Global site tag (gtag.js) - Google Analytics