Hibernate实体对象声明周期

Hibernate实体对象声明周期

  • 实体对象的4中状态

1.文字表达

Transient(临时状态/瞬时状态):刚刚被new关键字创建,还没有被持久化,不在Session的缓存中。
不受session管理,在数据库中没有记录

Persistent(持久化状态):已被持久化,并加入到Session缓存中。
受session管理,在数据库中存在与之相对应的记录,处于持久化状态的对象会影响(改变)数据库中的内容

Detached(游离状态):已被持久化,但不再处于Session缓存中。
不受session管理,但是数据库中有与之相对应的记录

Removed(删除状态):Session已经计划将其从数据库删除,并且不在处于Session缓存中。
不受session管理,数据库中也没有与之相对应的记录

2.图像展示
在这里插入图片描述
3.各个状态对象的特点
3-1临时对象(Transient Objects)

处于临时状态的对象称为临时对象
在数据库中不存在与之相对应的记录

3-2持久化对选哪个(Persist Objects)

处于持久化状态的对象称为持久化对象
在数据库中存在于相对应的记录

3-3游离对象(Detached Objects)

处在游离状态的对象称为游离对象

在数据库中可能存在与之相对应的记录(前提是没有其他Session实例删除该记录)

3-4删除状态(Removed Objects)

处在删除状态的对象称为被删除对象

数据库中存在与之对应的记录(已经计划从数据库中删除)

4.Session中的方法
4-1.session中的save()方法

1.把对象加入缓存中,使其变成持久化对象;
2.根据映射文件配置的标识符生成器为对象分配一个 OID;
3.计划执行一个 insert,把对象当前属性值组装到 insert 语句中;
4. 事务提交后(transaction.commit())永久的将数据保存到数据库。

4-2.session中的update()方法

1.把游离对象重新加入 Session 缓存中,使其变为持久化对象;
2. 计划执行一个 update,将对象当前属性组装到 update 语句,执行 update 语句;
3. 事务提交后(transaction.commit())永久的将数据保存到数据库;
 4. 不管对象属性有没有改变都会执行update 。

4-3.session中的delete()方法

1. 检查传入的参数是否是持久化对象,如果是持久化对象将其移出 Session 缓存;
2.计划执行一个 delete,但是并不立即执行;
3. 当 Session 清理缓存时才执行 delete,比如执行 Session.flush()。(清理代表的是同步,和数据库中的同步)

4-4.Session的load()和get()方法

load() 与 get() 方法都是根据 OID 加载持久化对象。
load() 与 get() 方法的不同点:
如果数据库中不存在与 OID 对应的记录:
load() 会抛出 ObjectNotFoundException 异常;
get() 会返回 null。
默认加载策略:
load() 使用类的延迟加载策略;
get() 使用类的立即加载策略。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值