hibernate savealiasentity 保存后id为空_Java的学习(28)hibernate实体状态

这篇博客探讨了Hibernate中的实体状态,包括瞬时、持久和脱管状态的定义及转换。文章通过实例展示了save、update和saveOrUpdate方法的作用,并讲解了一级缓存的工作原理。还介绍了客户和定单的一对多关系,外键维护方式,以及cascade级联操作的几种类型。
摘要由CSDN通过智能技术生成

实体Entity有三种状态,瞬时状态、持久状态、脱管状态

  1. 瞬时状态:transient, session没有缓存,数据库也没有记录,oid没有值
  2. 持久状态:persistent, session有缓存,数据库也有记录,oid有值
  3. 脱管状态/游离状态:detached,session没有缓存,数据库有记录,oid有值

瞬时 -> 持久:

  • 新创建的一个对象,经过save,或者savaOrUpdate调用后,会变成持久状态

持久 -> 脱管:

  • 当session关闭或者清除后,对象变成脱管状态

查询操作:get、load、createQuery、createCriteria 等 获得都是持久态

瞬时状态执行save、update、saveOrUpdate之后变成持久状态

持久态 转换 脱管态:

  1. session.close () 关闭
  2. session.clear() 清除所有
  3. session.evict(obj) 清除指定的PO对象

一级缓存

hibernate优先从session缓存中获取,如果有就使用;如果没有再查询数据库。当session关闭时,一级缓存销毁。(两次查询相同对象只会执行一次select语句)

一级缓存快照

3e748eb7fdcdaf451ea3b8d828972288.png

commit比较的是快照与缓存的不同,如果不同就提交,如果相同就不执行update语句

一级缓存刷新

通过flush命令可以手动让缓存区与数据库同步

4ac3c36bed40829b0abfde6dd97c6ebb.png

HQL的结果会进行一级缓存,SQL的结果不会添加到一级缓存

执行save方法,设置的ID将忽略,将会按数据库的id继续排列(但设置id不会报错)。

persist保存的对象&

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值