
本着应用的目的快速学习Hibernate4框架
- Hibernate对象和常用方法
前面的话
本节主要介绍:
- Hibernate中四种对象状态和关系
- Session常用方法讲解
- Hibernate中的OID和OID生成策略
Hibernate中四种对象状态和关系
临时状态(transient):刚用new语句创建,还没有被持久化,并且不处于Session缓存中。处于临时状态的Java对象被称为临时对象。
持久化状态(persistent):已经被持久化,并且加入到Session缓存中。处于持久化状态的Java对象被称为持久化对象。
删除状态(removed):不再处于Session的缓存中,并且Session已经计划将其从数据库中删除。处于删除状态的Java对象被称为删除对象。
游离状态(detached):已经被持久化,但不再处于Session的缓存中。处于游离状态的Java对象被称为游离对象。
1 | public class StudentTest { |
四种对象状态的关系:

Session常用方法讲解
- save()方法
- 将一个临时对象转变成持久化对象;
- load()方法 VS get()方法
都是根据OID从数据库中加载一个持久化对象。
区别1:假如数据库中不存在与OID对应的记录,Load()方法会抛出异常,而get()方法返回null;
区别2:load()方法默认采用延迟加载策略,get()方法采用立即检索策略; - update()方法 将一个游离态对象转变为持久化对象;
- saveOrUpdate()方法 包含了save()和update()方法;
- merge()方法 合并对象
- delete()方法 删除对象
1 | public class StudentTest { |
Tips:
- 当要删除一个对象时,采用load()方法,会使性能更优,当要获取对象并操作该对象时,采用get()方法立即检索。
- 如果使用update()方法更新一个游离态对象,而session缓存存在该对象(根据OID),则会抛出NonUniqueObjectException,此时采用merge()方法以达到更新效果。
关于Hibernate中的OID和OID生成策略
对象标识符OID
Hibernate用对象标识符(OID)来区分对象,我理解的就是ObjectID,意思就是对象对应数据库中表的主键。
Hibernate对象标识符生成策略
主键的分类 业务主键 VS 代理主键 代理主键时不具有业务性的;
- increment 由Hibernate自动以递增的方式生成标识符,适用于代理主键;
- identity 由底层数据库生成标识符,适用于代理主键;
- sequence 由Hibernate根据底层数据库的序列来生成标识符,适用于代理主键;
- hilo Hibernate根据high/low算法来生成标识符,适用于代理主键;
- native 根据底层数据库对自动生成标识符的支持能力,来选择identity,sequence或hilo;
更多内容请参考别人写的博文:
hibernate中的OID说明