码农小汪-Hibernate学习5-hibernate中对象的三种状态分析

来源:互联网 发布:hbase不直接删除数据 编辑:程序博客网 时间:2024/05/01 15:06

比较清楚这三种状态是十分有必要的,了解清楚才好做事情

  1. 瞬态:
    对象new了之后,尚未和sesssion关联在一起。瞬态的对象不会保存到数据库

  2. 持久态:
    持久化的实例的数据在数据库中有对应的记录的,并且拥有一个标识符。可以是刚刚保存的,也可以是刚刚加载的。无论哪一种,都必须有指定的session关联在一起、Hibernate 会检测到持久化对象的状态是否改变,在操作完成后将对象的数据写回数据库。开发者不需要手动的update

  3. 托管:
    某个实例曾今是持久化的状态,但是随着我们的session的关闭,该对象就变成托管的状态啦。托管状态对象的引用依然有效,可以对对象修改,重新与新的session关联的话,会写入数据库的。没有关联就不会操作的。只是对于对象的修改。

这里写图片描述


简单的区分一下就是这个
临时 —> 持久
save,persist,saveOrUpdate

托管 —> 持久
update,saveOrUpdate,saveOrUpdateCopy , merge,lock,replicate,refresh

持久 —> 托管
evict close clean

持久 —> 临时
delete


  1. save 和update区别
    save的作用是把一个新的对象保存 
    update是把一个脱管状态的对象或自由态对象(一定要和一个记录对应)更新到数据库(存在的记录 )
  2. saveOrUpdate update
    基本上就是合成了save和update,而update只是update

  3. persist和save
    persist把一个瞬态的实例持久化,但是并”不保证”标识符(identifier主键对应的属性)被立刻填入到持久化实例中,标识符的填入可能被推迟到flush的时候。(不是立即就行动)
    save, 把一个瞬态的实例持久化标识符,及时的产生,它要返回标识符,所以它会立即执行Sql insert

  4. update 和merge
    session.update(a) a对象那个会变成持久化的状态
    而merge(a)之后,a对象不是持久化状态,而是返回a对象的一个副本,该副本处于持久化状态

  5. get and load
    在hibernate中我们知道如果要从数据库中得到一个对象,通常有两种方式,一种是通过session.get()方法,另一种就是通过session.load()方法

    当使用load方法来得到一个对象时,此时hibernate会使用延迟加载的机制来加载这个对象,即:当我们使用session.load()方法来加载一个对象时,此时并不会发出sql语句,当前得到的这个对象其实是一个代理对象,这个代理对象只保存了实体对象的id值,只有当我们要使用这个对象,得到其它属性时,这个时候才会发出sql语句,从数据库中去查询我们的对象。
    相对于load的延迟加载方式,get就直接的多,当我们使用session.get()方法来得到一个对象时,不管我们使不使用这个对象,此时都会发出sql语句去从数据库中查询出来

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 阴阳师吸血姬血太厚了怎么办 电话被骗了钱怎么办 镇魔曲元宝被扣怎么办 镇魔曲以前的角色怎么办 镇魔曲手游转职后装备怎么办 镇魔曲个性标签任务怎么办 教师资格证申请表打不开怎么办 怎么办appstore换到日本 电脑内存太小怎么办 win10声音卡顿怎么办 录音播放卡顿怎么办 笔记本电脑玩dnf卡怎么办 龙之谷约惠码被删了怎么办 天涯明月刀马没有了怎么办 icloud照片无法同步怎么办 ipad不能下载app怎么办 ipad屏幕孔进水怎么办 ipad无法验证登录怎么办 dnf电脑配置低怎么办 淘宝直播粉丝不够怎么办 电脑页面显示不全怎么办 脸上发痒长痘怎么办 扣扣魔性表情泡泡消失怎么办 脚起小泡泡很痒怎么办 孕妇脚痒起水泡怎么办 孕妇手脚起湿疹怎么办 嘴巴破皮了怎么办 小便刺痛阴唇红肿怎么办 集成墙面挂照片怎么办 苹果电脑网页游戏打不开怎么办 苹果6plus发热怎么办 玩手游手机太卡怎么办 苹果七发烫厉害怎么办 苹果手机延迟高怎么办 王者荣耀总是卡怎么办 王者荣耀卡屏怎么办 王者荣耀网络延迟怎么办 荣耀8手机卡了怎么办 荣耀v10有点卡怎么办 荣耀10有点卡怎么办 8g内存吃鸡会崩怎么办