如何实际跟踪对JPA实体的状态更改

当我使用java.persistence.EntityManger.find()一个@Entity时,EntityManager会在Transaction中检查其关联的持久性上下文的现有实例。如果存在,那么

  1. 如果上下文中存在要搜索的实体,则将其返回给EntityManager.find的调用方
  2. 如果上下文中不存在要搜索的实体,则EntityManager从数据源获取它并将其放在那里,然后将其返回给EntityManager的调用者。

并且,如果事务不包含管理器关联的持久性上下文的现有实例,则管理者创建一个实例,将其与事务关联,在数据源中找到实体,然后将其添加到该上下文中进行管理,然后返回该实体给寻找者。

->结果是相同的,因为调用方现在具有一个存在于持久性上下文中的托管实体。(重要:持久性上下文已附加到事务中,因此,如果事务已在客户端获得“托管”实体的那一刻结束,那么持久性上下文将不再存在,并且该实体将“分离”不再管理)。

现在,当我在@entity实例上使用setter或其他内部状态更改方法进行状态更改时,将跟踪这些更改,因为我的实体是持久性上下文的一部分,当事务最终提交时,该持久性上下文将刷新到数据源。我的问题是如何跟踪状态变化以及如何跟踪?如果我通过某个中介对象进行更改,那么该中介对象可以相应地更新持久性上下文,但是我不是(或者是?)。我使用我的@entity注释对象直接进行更改。那么如何跟踪这些变化。

也许有正在监听的事件?听什么了?我正在阅读有关该主题的书籍和文章,但我无法将这一点固定下来。

里卡多·古斯芒

在实体的生命周期内,状态更改由jpa供应商的内部实现跟踪。

脏检查策略是特定于供应商的。可以通过字段比较或字节码增强(例如在JPA脏检查中发布)来完成

尽管它是特定于供应商的,但PersistentContext将在状态同步期间(在刷新或提交时)知道状态更改。

重要的是要记住所有可以进行冲洗的点:

  • 手动地
  • 查询之前
  • 提交之前

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

dbContext如何跟踪实体的状态

来自分类Dev

为实体启用更改跟踪

来自分类Dev

如何运行一次性脚本来操作 jpa 实体数据并跟踪 envers?

来自分类常见问题

如何清除实体框架中的跟踪实体

来自分类Dev

实体框架6:审核/跟踪更改

来自分类Dev

如何使我的数据库优先EF 6.1实体成为更改跟踪代理

来自分类Dev

在Git日志中跟踪文件状态更改

来自分类Dev

跟踪JPA中已更改的属性

来自分类Dev

在更新表时跟踪行中的实际更改

来自分类Dev

在hibernate / jpa环境中实际删除实体吗?

来自分类Dev

在Hibernate / JPA环境中实际删除实体吗?

来自分类Dev

发布实体状态更改的最佳做法

来自分类Dev

实体框架更改父抽象对象的状态

来自分类Dev

实体状态始终更改为已修改

来自分类Dev

实体框架更改父抽象对象的状态

来自分类Dev

发布实体状态更改的最佳做法

来自分类Dev

根据日期时间值更改实体状态

来自分类Dev

如何删除跟踪的格式更改

来自分类Dev

如何使用 Javascript 更改/更新 Dynamics crm 实体记录数据和状态从活动变为非活动

来自分类Dev

如何判断Hibernate 4实体是代理还是实际实体?

来自分类Dev

如何映射JPA这些实体

来自分类Dev

如何创建JPA实体的LinkedList

来自分类Dev

如何处理JPA实体

来自分类Dev

实体图上的JPA更改事件[EclipseLink]

来自分类Dev

审核实体JPA中的更改

来自分类Dev

在JPA中更改子级后如何更新父级实体?

来自分类Dev

在JPA中更改子级后如何更新父级实体?

来自分类Dev

原则不跟踪实体中某些字段的更改

来自分类Dev

扩展微风js实体的属性会导致无法跟踪更改