分享知识-快乐自己:Hibernate对象的三种状态
图解:

1):瞬时状态(Transient)
对象与session没有关联,数据库中没有对应的数据。
一般new出来的对象便是瞬时对象。
对瞬时对象使用save()方法便使之成为持久对象。
由于数据库中没有对应的数据,所以对瞬时对象使用update()方法无效。
2):持久状态(Persistent)
对象与session有关联,且数据库中有对应id的数据。
使用get()、load()等方法获得的是持久对象。
对瞬时对象使用save()方法便使之成为持久对象。
对游离对象使用update()方法便使之成为持久对象。
对持久对象使用delete()方法使使之成为瞬时对象。
3):游离状态(Detached)
对象与sessions没有关联,但数据库中有对应id的数据。
对瞬时对象使用setId()方法,且数据库中有对应id的数据时,该对象便成为游离对象。
当对象为持久状态时,对session执行close()、clear()、evict()等方法后,该持久对象变为游离对象。
对游离对象使用delete()方法便使之成为瞬时对象。
对游离对象使用update()方法便使之成为持久对象。
由于数据库中已经存在对应id的数据,所以对游离对象使用save()方法无效。
hibernate涉及的脏检查:
当事务提交时(commit),hibernate会检查session中处在持久状态的对象, 判断与数据库是否一致,不一致则会将缓存里面的数据更新掉数据库里面的数据!
那么session什么时候刷新缓存:
1、执行commit方法时 //执行脏检查
2、session.flush(); //不会提交事务执行脏检查
更新数据的方法:
update(对象):
saveOrUpdate(对象):
1、通过id查询主键,存在就更新,不存在就新增!
2、当mapping配置文件的generator节点的class属性不为assigned时,造成只有update没select时,更改class为assigned可以解决!
3、不会发起查询,直接更新 merge(对象):合并,先查询,与缓存里面的数据比较一样时不做任何操作,不一样时,再更新或者插入!效率更高!
saveOrUpdate(对象)与merge(对象)方法:
1、主键生成策略:
assigned 操作一样!
2、SQL语句不同:
sequence,动态更新(dynamic-update="true")策略
saveOrUpdate(对象)只更新
merge(对象)先发起一条查询语句,在发起更新或者插入语句
分享知识-快乐自己:Hibernate对象的三种状态的更多相关文章
- hibernate对象的三种状态
对于hibernate,我想不在这里讲解了,我们就直接进入主题 在这里我将要说的是"hibernate对象的三种状态",对象是我们十分熟悉的,对吧!而对于对象它有三种状态 分别是瞬 ...
- Hibernate 对象的三种状态
hibernate对象的三种状态: (一) 瞬时(临时)状态: 对象被创建时的状态,数据库里面没有与之对应的记录! (二) 持久状态: 处于session的管理中,并且数据库里面存在与之对应的 ...
- 菜鸟学SSH(八)——Hibernate对象的三种状态
前面写了几篇关于SSH的博客,但不是Struts就是Spring,Hibernate还从来没写过呢.说好是SSH的,怎么可以光写那两个,而不写Hibernate呢对吧.今天就先说说Hibernate对 ...
- HIbernate学习笔记(二) hibernate对象的三种状态与核心开发接口
1.在hibernate中持久化对象有三个状态,这个面试时可能会问到: (1)transient瞬时态:在数据库中没有与之匹配的数据,一般就是只new出了这个对象,并且在session缓存中也没有即此 ...
- hibernate操纵数据库常用方法 及 hibernate对象的三种状态
在dao层使用hibernate语言来与数据库进行访问,hibernate作为面向对象思想开发的dao层框架其理解也需要以面向对象的思想来看待 使用.hibernate不仅支持使用者使用他提供的对象来 ...
- Hibernate对象的三种状态,瞬时态、持久态、游离态
1.瞬时态.(new完一个对象,突然断电,内存中没有此对象) hibernate中什么时候的对象为瞬时态呢,当我们new 一个对象时,还没有save时,它就是瞬时态的,当我们delete一个对象时,它 ...
- hibernate对象的三种状态及转换
一.hibernate对象三种状态 Transient(瞬时状态):没有session管理,同时数据库没有对应记录 举例:new 出来的对象还没有被session管理,此时该对象处于Transient ...
- [转]Hibernate对象的三种状态
在Hibernate中,对象有三种状态:临 时状态(Transient).持久状态(Persistent)和游离状态(Detached). 处于持久态的对象也称为 PO(PersistenceObje ...
- Hibernate(六)__对象的三种状态
瞬时(transient):数据库中没有数据与之对应,超过作用域会被JVM垃圾回收器回收,一般是new出来且与session没有关联的对象. 持久(persistent):数据库中有数据与之对应,当前 ...
随机推荐
- vue中使用key管理可复用的元素
1.概述 Vue 会尽可能高效地渲染元素,通常会复用已有元素而不是从头开始渲染. key解决上述问题之外的情景:这两个元素是完全独立的,不要复用它们. 2.示例 <!DOCTYPE html&g ...
- CDH集群集成kafka
搭建要求: 1.CDH环境已经搭建成功,在CDH上搭建kafka.要求用CDH上zookeeper管理kafka而不用kafka自带的zookeeper 2.kafka_2.11-0.8.2.1.tg ...
- 阿里云数据库RDS迁移,DTS 迁移过程中,是否会锁表,对源数据库是否有影响?
阿里云数据库RDS迁移,DTS 迁移过程中,是否会锁表,对源数据库是否有影响? DTS 在进行全量数据迁移和增量数据迁移的过程中,均不会对源端数据库进行锁表,因此在全量数据迁移和增量数据迁移的过程中, ...
- 世界上有10种人,一种懂二进制,一种不懂。那么你知道两个int32整数m和n的二进制表达,有多少个位(bit)不同么?
// ConsoleApplication10.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream& ...
- PHP下最好用的富文本HTML过滤器:HTMLPurifier使用教程
HTMLPurifier是我目前用过最好的PHP富文本HTML过滤器了,采用了白名单机制,有效杜绝了用户提交表单中的非法HTML标签,从而可以防止XSS攻击! HTMLPurifier项目地址:htt ...
- 2015 Astar Contest - Round 3 题解
1001 数长方形 题目大意 平面内有N条平行于坐标轴的线段,且不会在端点处相交 问共形成多少个矩形 算法思路 枚举4条线段的全部组合.分别作为矩形四条边.推断是否合法 时间复杂度: O(N4) 代码 ...
- Unity3D自定义编辑器简单实例
MenuItem:在标题栏自定义菜单.需要在Editor文件夹内创建脚本,无需挂载.但是注意其下的函数必须为静态函数. using UnityEngine; using UnityEditor; pu ...
- c# 根据枚举Value 获得名称
// 定义枚举类型enum sotype : int { book=1, pen=2, other=3 } // 输出名称 switch (Enum.GetName(typeof(sotype), 1 ...
- iOS 使用 Core Plot 绘制统计图表入门
本文转载至 http://blog.csdn.net/zhibudefeng/article/details/7677457 iOS(iPhone/iPad) 下图形组件有两个有名的,s7gra ...
- 解析域名得到IP
本文转载至 http://www.cocoachina.com/bbs/read.php?tid=142713&page=e&#a 分享类型:游戏开发相关 #include &l ...