EntityManager实体操作

本文详细介绍了在使用EntityManager进行实体管理时的各种操作,包括persist、merge、remove及refresh等方法的使用场景与状态转换,同时解析了实体在不同生命周期状态下的行为表现。

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

EntityManager

 

 持久化实体 persist(entity)

 

newEntity-----托管

 

托管-----无效,什么都不发生

 

删除状态------托管

 

游离-----提交时 例外抛出

 

更新实体

 

对实体的setXxx()方法的调用在容器flush时都会更新的

 

合并merge()

 

newEntity----copy一份----copy的那一份托管

 

托管----无效

 

删除状态---例外抛出

 

游离

 

         1。如果已经存在一个id一样的托管对象了,参数(游离状态)内容复制到托管对象,并返回托管对象。

 

        2。容器不存在id和游离对象相同的托管对象,创建一个游离对象的COPY并托管它,方法返回这个托管的引用。

 

总的来说:游离的对象永远不会变为托管对象,只会把内容合并进copy的或者存在的托管对象

 

remove()

 

托管----删除状态

 

remove游离 会异常

 

我们发现游离和删除状态的相关方法的交叉调用会抛异常

 

刷新实体 refresh()

 

只有托管对象才可以刷新

 

将数据库中最新的数据刷新实体

 

实体状态和生命周期事件

 

 

new ,没有ID,不在管理器的缓存中。

 

托管,容器flush时会同步到数据库

删除状态,仍然在管理器的缓存中,但是flush时,会删除数据库中的映射

游离,有ID,但是不在管理器的缓存中。

find()  getreference()     从数据库中得到实体

flush()

clear ()  所有的托管对象从缓存中清除,之前应该先flush

以下注解在实体内方法上,成为生命周期事件的回调函数

@PostLoad

@PrePersist  @PostPersist

@PreUpdate   @PostUpdate

@PreRemove @PostRemove

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值