首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

从JPA/EJB3持久性上下文中分离实体

从JPA/EJB3持久性上下文中分离实体的过程是将实体从持久性上下文中分离出来,以便在应用程序中对其进行操作。这是一种在Java持久性框架中处理实体的常见方法。

在JPA/EJB3中,实体是与数据库表中的数据行相映射的Java对象。当实体与数据库进行交互时,持久性上下文会跟踪实体的状态。然而,在某些情况下,需要将实体从持久性上下文中分离出来。这可能是为了避免在应用程序中意外修改实体状态,或者是为了在不同的事务上下文中处理实体。

要将实体从持久性上下文中分离出来,可以使用以下方法:

  1. 使用detach()方法:detach()方法是EntityManager接口中的一个方法,可以将实体从持久性上下文中分离出来。例如:
代码语言:java
复制
EntityManager em = ...;
MyEntity myEntity = ...;
em.detach(myEntity);
  1. 使用clone()方法:clone()方法是MyEntity类的一个方法,可以创建一个新的实例,并将其从持久性上下文中分离出来。例如:
代码语言:java
复制
MyEntity myEntity = ...;
MyEntity detachedMyEntity = myEntity.clone();
  1. 使用Serializable接口:将实体类实现Serializable接口,然后将实体序列化和反序列化。这将创建一个新的实例,并将其从持久性上下文中分离出来。例如:
代码语言:java
复制
MyEntity myEntity = ...;
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bos);
oos.writeObject(myEntity);
oos.flush();
byte[] byteData = bos.toByteArray();
bos.close();
oos.close();

ByteArrayInputStream bis = new ByteArrayInputStream(byteData);
ObjectInputStream ois = new ObjectInputStream(bis);
MyEntity detachedMyEntity = (MyEntity) ois.readObject();
ois.close();

在处理实体时,请注意避免在持久性上下文中直接修改实体状态,以避免意外的副作用。如果需要在应用程序中处理实体,请使用上述方法之一将实体从持久性上下文中分离出来。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

实战:应用对持久数据访问| 开发角度看应用架构9

JPA中的几个重要的API: JPA的API有主要以下几个:实体(entity)、持久性单元(persistence units)、持久性上下文( persistence context)、Entity...大魏这个类,在被生成对象时,会数据库表中读数据,然后可能会对数据修改,修改的这些数据,会存到持久性上下文中(运行在内存中),在默写情况下,会被存回数据库表中(例如提交)。...实体实例不具有持久性标识,并且尚未与持久性上下文相关联。 Managed State:具有持久性标识、并与持久性状态关联的实体实例、处于受管状态或持久状态。...Detached State: 实体具有持久性实体标识,但不与持久性上下文相关联。 当实体被序列化或在事务结束时会发生这种情况。 这种状态被称为实体分离状态。 ?...五、EntityManager接口和关键方法 javax.persistence.EntityManager接口用于与持久性上下文进行交互。 实体实例及其生命周期在持久性上下文中进行管理。

1.6K30

关于Java持久化相关的资源汇集:Java Persistence API

另一方面,JPA规范确实规定了实体继承的概念。我们已经处理了EJB 2.1规范中指出的各种问题和复杂性,现在允许完全的多态查询和关联。 问题:BEA计划什么时候支持/发布EJB3?...也就是,如果将您的应用程序EJB2会话bean转换到EJB3会话bean,但是完全没有修改持久化机制,可能不会发现重大差别。...在OpenJPA中,可以使用 fetch组 控制通过电缆发送数据图时确切地分离哪些数据。 问题:在运行时更改fetch模式容不容易? 回答:JPA规范没有为此提供任何工具。...但是,据我所知,当前的JPA实现都没有这么作,除非是通过数据库方的工作来实现多数据库查询。 问题:在JPQL中,SELECT子句可以多个实体中拉出数据吗? 回答:是的。...回答:JPA规范仅解决给定EntityManager相关对象的事务工作集的行为。它称之为“持久化上下文”。某些方面来讲,这是一个缓存,但通常是为了保持事务一致性,而不是为了性能的原因。

2.5K30
  • 白话说JPA | 开发角度看应用架构8

    JPA的API有主要以下几个:实体(entity)、持久性单元(persistence units)、持久性上下文( persistence context)、Entity Manager。...五、JPA中的persistence units 1. 持久性单元(persistence units)。 持久性单元是存储在应用程序存档中的所有实体类和persistence.xml文件的集合。...七、JPA中的持久性上下文( persistence context) 被EntityManager持久化到数据库中的对象(也就是把java应用生成、修改的数据保存到数据库表),或者数据库拉入内存中的对象...当一个实体与持久化上下分离时(例如通过调用EntityManager上的detach方法)该实体的状态不再与数据库保持同步。...大魏这个类,在被生成对象时,会数据库表中读数据,然后可能会对数据修改,修改的这些数据,会存到持久性上下文中(运行在内存中),在默写情况下,会被存回数据库表中(例如提交)。

    1.1K40

    应用对持久数据的管理 | 开发角度看应用架构7

    与Java Persistence API相关的三个关键概念是实体( entity)、持久性单元(persistence units,)、持久性上下文( persistence context.)。...三个概念听起来有点抽象,用大白话来说: 实体( entity)就是一个类,它定义了与数据库表的对应关系 持久性单元(persistence units)定了访问数据库的方式 持久性上下文( persistence...五、ID的生成 每个实体实例都映射到数据库表中的一行。 表格中的每一行都是唯一的,并由唯一的ID标识为持久实体标识。 永久实体标识是主键字段生成的。 主键字段在每个实体类中都是必需的。...实体管理器在一组管理实体实例中工作。 这些被管实体实例被称为实体管理器的持久性上下文。 您可以将持久性上下文视为持久性单元的唯一实例。...事务与单个资源的这种分离允许事务包含跨越多个资源的复杂操作,例如多个数据源和JMS消息传递系统。

    2.7K40

    Spring认证中国教育管理中心-Spring Data JPA 参考文档七

    JPA审计 常规审计配置 Spring Data JPA 附带一个实体侦听器,可用于触发审计信息的捕获。...首先,您必须AuditingEntityListener在orm.xml文件内的持久性上下文中注册要用于所有实体的,如以下示例所示: 示例 116.审计配置 orm.xml <persistence-unit-metadata...使用 XML 配置激活审计 Spring Data JPA 1.5 开始,您可以通过使用注释对配置类进行... Spring Data JPA 1.9 开始,Spring Data JPA 包含一个名为的类,假设它仅由应用程序中的一个实例管理,JpaContext您可以EntityManager通过该类获取受管理的域类... version 1.1.0 开始,Spring Data JPA 附带了一个自定义 CDI 扩展,允许在 CDI 环境中使用存储库抽象。该扩展是 JAR 的一部分。

    1K20

    什么是JPA?Java Persistence API简介

    Java中的数据持久性 编程的角度来看,ORM层是一个适配器层:它使对象图的语言适应SQL和关系表的语言。ORM层允许面向对象的开发人员构建持久保存数据的软件,而无需离开面向对象的范例。...使用JPA时,可以创建数据存储区到应用程序的数据模型对象的映射。您可以定义对象和数据库之间的映射,而不是定义对象的保存和检索方式,然后调用JPA来保存它们。...JPA的数据持久性 现在考虑清单3,我们使用JPA 持久化Musician类。...JPA中的实体关系 简单地使用原始字段持久化对象只是方程式的一半。JPA还具有管理彼此相关实体的能力。...正如您在本文中看到的,Java Persistence API引入了一系列功能并支持Java对象持久性。简单的应用程序可能不需要JPA的所有功能,在某些情况下,配置框架的开销可能不值得。

    10.2K30

    如何来实现SpringBoot应用的JPA数据持久化和热插拔

    最早的JPA规范是由Java官方提出的,随JavaEE5规范一同发布。 实体( Entity ) 实体是轻量级的持久化域对象。通常,实体表示关系数据库中的表,并且每个实体实例对应于该表中的行。...实体的主要编程工件是实体类,尽管实体可以使用辅助类。 在EJB3之前,EJB 主要包含三种类型:会话bean、消息驱动bean、实体bean。...但自EJB 3.0开始,实体bean被单独分离出来,形成了新的规范: JPA。所以,JPA完全可以脱离EJB 3来使用。实体JPA中的核心概念。 实体的持久状态通过持久化字段或持久化属性来表示。...(1)保存给定实体。 (2)返回由给定ID标识的实体。 (3)返回所有实体。 (4)返回实体的数量。 (5)删除给定的实体。 (6)指示是否存在具有给定ID的实体。...如果IDE启动多个应用程序,则只有第一个应用程序将 支持LiveReload。 重新加载模板 Spring Boot在大多数模板技术中,都有包括禁用缓存的配置选项。

    4.5K30

    10 个影响程序性能的Hibernate 错误,学会让你少走弯路

    Hibernate将所有被管理的实体存储在持久性上下文中,并试图尽可能延迟写操作的执行。...所有这些情况都不适合JPA和Hibernate的查询能力以及基于实体管理的生命周期。 如果这些用例只占应用程序的一小部分,那么你仍然可以使用Hibernate。...不幸的是,用JPA和Hibernate操作起来则没有那么容易。每个实体都有自己的生命周期,而你如果要更新或删除多个实体的话,则首先需要从数据库加载它们。...幸运的是,你可以使用JPQL、原生SQL或Criteria查询对JPA和Hibernate执行相同的操作。 但是它有一些你应该知道的副作用。在数据库中执行更新或删除操作时,将不使用实体。...flush方法将强制Hibernate在clear方法当前持久化上下文中分离所有实体之前,将所有待处理的更改写入数据库。

    2K50

    使用Lagom和Java构建反应式微服务系统

    通过内置支持具有命令查询责任分离(CQRS)的事件溯源(ES),Lagom倾向于以数据持久性为基础的事件源架构。持续实体是Lagom实施事件溯源。...Lagom产生消息的主要来源是持久性实体事件。响应于发生的事情而不是以特殊方式发布事件,最好持久性实体获取事件流,并将其适应于发送到消息代理的消息流。...Lagom支持持久性的阅读侧处理器和消息代理主题订阅者。要在实体启动时重新创建当前状态,将重放事件。...例如,需要的地方从数据库加载JPA @Entity,即可能有许多具有相同实体标识符的Java对象实例。相比之下,只有一个具有给定标识符的PersistentEntity实例。...使用JPA,您通常只存储当前状态,并且未捕获状态达到的历史记录。您通过向其发送命令消息与PersistentEntity进行交互。实体将自动分布在服务集群中的节点之间。

    1.9K50

    Spring认证中国教育管理中心-Spring Data Couchbase教程三

    要配置审计,首先需要在上下文中有一个审计感知 bean。所说的 bean 必须是类型的AuditorAware(允许产生一个可以存储在T我们之前看到的类型的 xxxBy 字段中的值)。...使用 Spring 数据存储库 Spring Data repository 抽象的目标是显着减少为各种持久性存储实现数据访问层所需的样板代码量。...返回由给定 ID 标识的实体。 返回所有实体。 返回实体的数量。 删除给定的实体。 指示具有给定 ID 的实体是否存在。...我们还提供了特定于持久性技术的抽象,例如JpaRepository或MongoRepository。...这些接口扩展CrudRepository,并露出下面的持久化技术在另外的能力,以比较通用的持久性与技术无关的接口,如CrudRepository。

    1.8K30

    了解 Spring Data JPA

    它一改之前 EJB 2.x 中实体 Bean 笨重且难以使用的形象,充分吸收了在开源社区已经相对成熟的 ORM 思想。另外,它并不依赖于 EJB 容器,可以作为一个独立的持久层技术而存在。...Java持久化规范,是EJB2.x以前的实体Bean(Entity bean)分离出来的,EJB3以后不再有实体bean,而是将实体bean放到JPA中实现。...JPA的底层实现是一些流行的开源ORM(对象关系映射)框架,因此JPA其实也就是java实体对象和关系型数据库建立起映射关系,通过面向对象编程的思想操作关系型数据库的规范。...(此处为 Zip),然后检查剩下的字符串是否为 AccountInfo 的一个属性,如果是,则表示根据该属性进行查询;如果没有该属性,则重复第二步,继续右往左截取;最后假设 user 为 AccountInfo...2") public int increaseSalary(int after, int before); 3.通过调用 JPA 命名查询语句创建查询 命名查询是 JPA 提供的一种将查询语句方法体中独立出来

    2K20

    Spring Boot 嵌入式服务器、Hibernate 关系和 Spring Data 全解析

    一个事务可以由 ACID 属性(原子性、一致性、隔离性和持久性) 来描述。 在 Hibernate 框架中,我们有 Transaction 接口来定义工作单元。...一对一 多对一 多对多 一对多 实体生命周期 在 Hibernate 中,我们可以创建一个实体的新对象并将其存储到数据库中,也可以数据库中获取实体的现有数据。...这些实体与生命周期相关,每个实体对象都通过生命周期的各个阶段。...Hibernate 生命周期主要有四种状态: 瞬态状态 持久状态 分离状态 已移除状态 Spring Data Spring Data 是一个用于在 Spring 应用程序中访问数据的项目集合。...Spring Data JPA Spring Data JPA 是一个库,它使得在 Spring 应用程序中实现基于 Java Persistence API (JPA) 的存储库(一个“DAO”缩写)

    27920

    Spring Data Jpa最佳实践

    前言 Spring Data Jpa框架的目标是显著减少实现各种持久性存储的数据访问层所需的样板代码量。Spring Data Jpa存储库抽象中的中央接口是Repository。...它需要领域实体类以及领域实体ID类型作为类型参数来进行管理。该接口主要用作标记接口,以捕获要使用的类型并帮助您发现扩展该接口的接口。...this.em = em; } } 构造一个SimpleJpaRepository实例,只需要一个领域对象的类型,和EntityManager 实例即可,EntityManager在Spring的上下文中已经有了...集成QueryDsl后,复杂分页查询的画风就变的更加清爽了,如: /** * QSendLog实体是QueryDsl插件自动生成的,插件会自动扫描加了@Entity的实体,生成一个用于查询的...p6spy.readthedocs.io/en/latest/configandusage.html 结语 最后的BaseJpaRepository功能上基本满足了所有的查询需求,又做了基础查询和复杂查询的不分离

    32220

    JPA2.1中三个提升应用性能的新功能

    经常在网上看到开发者们抱怨JPA性能低下的帖子或文章,但如果仔细查看这些性能问题,常会发现导致问题的根本原因大致包括以下几个: 使用过多的SQL查询数据库中获取所需的实体信息,即我们常说的n+1查询问题...笔者将在本文中解释如何利用JPA2.1的功能避免上述问题。...实体图通过独立于查询的方法指定应该数据库中获取的实体的图。这意味着,你需要为实体图创建一个独立的定义,并在需要时与查询合并。...面向对象的角度来看,对实体进行更新和删除操作是完全可以接受的。但当你不得不更新一大组实体时,这种操作就会非常低效。...持久性提供者(Persistence Provider)将为每个更新实体创建一个更新语句,并在下一次flush操作时发送至数据库中。 然而,SQL提供了一个更为高效的方式。

    1.7K40
    领券