JPA 实体生命周期理解和总结

本文详细介绍了Java Persistence API (JPA)中实体的四种生命周期状态:New、Managed、Detached和Removed,并通过示例展示了如何在这些状态间转换以及它们对数据库操作的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先来一个图

这里写图片描述

jpa 实体生命周期有四种状态

  1. New:瞬时对象,尚未有id,还未和Persistence Context建立关联的对象。

  2. Managed:持久化受管对象,有id值,已经和Persistence Context建立了关联的对象。

  3. Datached:游离态离线对象,有id值,但没有和Persistence Context建立关联的对象。

  4. Removed:删除的对象,有id值,尚且和Persistence Context有关联,但是已经准备好从数据库中删除

Managed状态下的数据保存,更新以及删除数据下的Removed状态,数据都不会立即更新到数据库,只有当你事务提交或者em.flush(),才会立即更新到数据库。

Datached的状态,可以调用em.merge()方法,这个方法会根据实体类的id来更新数据库数据,这时实体类变成了Managed状态。

四种状态总结:

状态名 作为java对象存在 在实体管理器中存在 在数据库存在

New yes no no

Managed yes yes yes

Detached no no no

Removed yes yes no

@Transactional
public void save(){

    //New 状态
    Task t = new Task();
    t.setTaskName("task" + new Date().getTime());
    t.setCreateTime(new Date());

    //Managed状态
    em.persist(t); //实体类t已经有id t.getId();
    t.setTaskName("kkk");  //更新任务名称,这时,如果提交事务,则直接将kkk更新到数据库

    //Detached状态 事务提交或者调用em.clear都直接将实体任务状态变为Detached
    em.clear();
    t.setTaskName("kkk"); //更新数据不会更新到数据库

    //Removed状态
    em.remove(t);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值