Hibernate(二)持久化对象的状态

简介

以前学习Hibernate的笔记,整理一下便发出来了,防止弄丢。有错误的话麻烦各位留言评论,感激不尽。

持久化类

Hibernate完成了从面向对象模型表示的对象关系模型表示的数据结构的映射,可以用面向对象的方式来处理数据库中记录。通过映射文件或注解,将持久化类映射为数据库中的表,而不需要继承任何类或者接口(即,低入侵式设计)
- 但有几点最基本的要求:
- 无参构造器
- 标识属性,最好使用基本类型的包装类
- 相应的getter/setter方法

瞬态

由new创建的对象且未与Session关联. 该状态下对象未被赋予标识值,且所进行的任何修改不会保存到数据库. 最终会被GC所回收.

持久态

与Session相关联,被添加至Session内部的集合属性,拥有与数据库中对应的标识ID,任何更改都会被Session所检测且更新数据库中的记录。当然,这在session的事务没有关闭之前才有效

脱管

之前是持久化状态,现在与Session脱离关联,对象的改动也不会更新到数据库中,之后可以通过update()恢复为持久化状态。可以实现逻辑上的长事务。

三种状态之间的转化

区别

save()与persist(): 区别于是否立刻执行底层的insert语句,是否返回记录的主键值

get()与load(): 区别于是否延迟加载。若存在记录,load()返回只含有标识值的代理对象,get()直接从数据库中获取。若不存在,load()返回不含标识值的空代理对象(映射文件中已开启懒加载),get()返回null

参考文档

[轻量级Java_EE企业应用实战] https://book.douban.com/subject/6002664/

时间: 2024-10-08 13:35:39

Hibernate(二)持久化对象的状态的相关文章

hibernate中持久化对象的生命周期(三态:自由态,持久态,游离态 之间的转换)

三态的基本概念: 1,  暂时状态(Transient):也叫自由态,仅仅存在于内存中,而在数据库中没有对应数据.用new创建的对象,它没有持久化,没有处于Session中,处于此状态的对象叫暂时对象: 2,  持久化状态(Persistent):与session关联而且在数据库中有对应数据.已经持久化,添?到了Session缓存中.如通过hibernate语句保存的对象.处于此状态的对象叫持久对象: 3,  游离状态(Detached):持久化对象脱离了Session的对象.如Session缓

Hibernate之持久化对象

时间:2017-1-19 23:00 --Hibernate持久化类的状态 1.持久化类:就是一个实体类与数据库建立了映射. 2.Hibernate为了方便管理持久化类,将持久化类分为了三种状态:    1)瞬时态:transient(临时态)    2)持久态:persistent    3)脱管态:detached(离线态) --三种持久化对象的状态 1.三种持久化对象的状态    1)瞬时态        不存在持久化标识OID,尚未与Hibernate Session关联对象,被认为处于

Hibernate持久化对象的状态

1. 站在持久化的角度 , Hibernate 把对象分为 4 种状态 : 持久化状态, 暂时状态, 游离状态(脱管状态) , 删除状态.Session 的特定方法能使对象从一个状态转换到还有一个状态 . 2. 暂时状态(Transient) : 1). 在使用代理主键的情况下 , OID 通常为 null 2). 不处于 Session 的缓存中 3). 在数据库中没有相应的记录 3. 持久化状态(也叫"托管" )( Persist) 1). OID 不为 null 2). 位于 S

Hibernate 持久化对象的状态

持久化对象有3种状态:1.持久化状态      2.临时状态      3.游离状态 Session 的特定方法能使对象从一个状态转换到另一个状态临时对象(transient)•    在使用代理主键的情况下, OID 通常为 null•    不处于 Session 的缓存中•    在数据库中没有对应的记录 持久化对象(也叫”托管”)(Persist)•    OID 不为 null•    位于 Session 缓存中•    持久化对象和数据库中的相关记录对应•    Session 在

Hibernate(二)——POJO对象的操作

POJO对象其实就是我们的实体,这篇博客总结一下框架对POJO对象对应数据库主键的生成策略,和一些对POJO对象的简单增删改查的操作.  一,Hibernate框架中主键的生成策略有三种方式: 1,数据库负责生成主键(代理主键)  a,native:表示由设置的方言决定采用什么数据库生成主键方式,例如:在MySQL中会采用自增长的方式,主键字段必须都是整形类型:在Oracle数据库中,会采用序列的增长方式.  b,sequence:表示采用数据库的序列生成主键,适用于Oracle,DB2数据库中

hibernate中持久化对象的生命周期(转载)

三态的基本概念 1, 临时状态(Transient):也叫自由态,只存在于内存中,而在数据库中没有相应数据.用new创建的对象,它没有持久化,没有处于Session中,处于此状态的对象叫临时对象: 2, 持久化状态(Persistent):与session关联并且在数据库中有相应数据.已经持久化,加入到了Session缓存中.如通过hibernate语句保存的对象.处于此状态的对象叫持久对象: 3, 游离状态(Detached):持久化对象脱离了Session的对象.如Session缓存被清空的

hibernate载入持久化对象的两种方式——get、load

一.get与load对照 在hibernate中get和load方法是依据id取得持久化对象的两种方法.但在实际使用的过程中总会把两者混淆,不知道什么情况下使用get好,什么时候使用load方法效率更高.下边具体说一下get和load的不同,有些时候为了对照也会把find加进来. 1.从返回结果上对照: load方式检索不到的话会抛出org.hibernate.ObjectNotFoundException异常 get方法检索不到的话会返回null 2.从检索运行机制上对照: get方法和fin

Hibernate中实体对象的状态

实体对象的状态 这里的实体对象是指Hibernate的O/R映射关系中的域对象(即O/R中的O).实体对象的生命周期是指实体对象由产生到被GC回收的一段过程,实体对象的生命周期包括3种状态:自由状态(Transient),持久状态(Persistent)和游离状态(Detached). 1.自由状态 自由状态是指实体对象在内存中自由存在,但此时它与数据库无关.主要有一下两个特征: >> 不处于Session的缓存中,也就是不被任何一个Session关联. >> 在数据库中没有对应的

精通Hibernate——Hibernate中Java对象的状态详解

Hibernate中对于要持久化的Java对象在他的生命周期中需要经历以下几种状态: 1.临时状态(transient):刚刚用new语句创建,还没有被持久化,不处于session的缓存中.处于临时状态的Java对象被称为临时对象. 2.持久化状态(persistent):已经被持久化,加入到session中,处于持久化的状态Java对象被称为持久化对象. 3.游离状态(detached):已经被持久化,但不处于session中. 下面看一下Customer对象状态转换过程 临时对象的特征 1.