hibernate中的对象状态

对象分为三种状态

1. 瞬时状体:没有id,没有在session中缓存

2. 持久状态:有id,在session缓存中

3. 游离|托管状态:有id,没有在session缓存中

三种状态的转换图

三种方法讲解

save方法

save方法是将对象瞬时状态转变为持久状态

根据主键生成策略

  如果为identity方式,则先执行insert语句,得到oid执行对象的set方法设置oid,将对象放到session缓存中

  如果为increment方式,则由先执行select max(oid) from customer,再加1,执行对象的set方法设置oid,将对象放到session缓存中,提交的时候执行insert方法

即便是游离状态的对象,调用save方法,同样会根据生成策略完成oid的设置,在放到session缓存中当作一个新的对象,提交的时候执行insert语句

也就是说提交的时候在数据库中执行什么语句,是根据session调用的save、update、delete决定的

update方法

update方法是将对象由游离状态转变为持久状态

1. 参数为瞬时状态的对象时,调用update会报错,程序会检查对象是否含有oid

2. 参数为游离状态的对象时,将对象放到sesion缓存中,提交的时候在数据库中执行update方法,

  2.1 如果oid在数据库中不存在则不跟新任何内容,即放到sesion中时候只要对象有oid即可,至于在数据库中是否存在此oid则不做检查

  2.2 如果oid在数据库中存在,则会更新数据库中此oid的数据内容

delete方法

1. 参数为瞬时状态时,调用delete会报错,程序会检测对象是否含有oid

2. 参数为游离状态时,将对象放到sesion缓存中,提交的时候在数据库中执行delete方法

  2.1 如果oid在数据库中不存在不会删除任何数据,即放到session中的时候只要对象有oid即可,至于在数据库中是否存在此oid则不做检查

  2.2 如果pid在数据库中存在,则会删除数据库中此oid的数据内容

 

转载于:https://www.cnblogs.com/zsh-wj/p/8359056.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值