侧边栏壁纸
  • 累计撰写 793 篇文章
  • 累计创建 1 个标签
  • 累计收到 1 条评论
标签搜索

目 录CONTENT

文章目录

hibernate

Dettan
2021-04-10 / 0 评论 / 0 点赞 / 187 阅读 / 652 字
温馨提示:
本文最后更新于 2022-07-23,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。
给 entity加注解@DynamicUpdate 或 @DynamicInsert 后就会局部更新

Hibernate 的三种状态
在Hibernate中,对象的存在状态有三种,分别是:Transient(瞬时状态)、Persistent(持久化状态)、Detached(脱管/游离状态)。这三种状态的区别在于:
1.
Transient:内存 Session 数据库
处于瞬时状态时,对象只存在于JVM内存中,并没有和Hibernate中的Session关联,没有纳入到Hibernate的缓存管理中去,在数据库中也没有与对象对应的记录。如:新建一个对象时,该对象就处于瞬时状态。 
2.
Persistent:内存 Session 数据库
处于持久化状态时,对象不仅在内存中占有空间,Hibernate缓存Session中也存在该对象,并且数据库表中有与该对象对应的记录,主键值确定。 
3.
Detached:内存 Session 数据库
处于游离状态时,对象在内存中存在,在数据库中有与之对应的记录,但是不存在于Session缓存中


detached:与持久对象关联的Session被关闭后,对象变为托管的。对托管对象的引用依然有效,对象可以继续被修改。托管对象如果重新关联到某个新的Session上,会再次转变为持久化对象。托管期间的改动将会被持久化到数据库。
Transient: 此状态下的更改自动保存到数据库在提交事务后,没有更改不会执行update语句
Detached状态下不管JVM内存中对象的属性值和数据库表中的值是否一致,调用update方法后一定会发出一条update语句,这和Persistent状态下是不一致的

merge()
先select再update
且只会更新不一样的字段,不会更新所有字段,之后进入持久化状态。如果内存中的对象与select到的数据一致,则不会发出update()。


flush()方法和clear()方法
flush()方法指的是强制缓冲数据与数据库数据保持一致; clear()方法指的是清空缓存。
0

评论区