[学习]Hibernate 3.2学习笔记之四
来源:互联网 发布:微信小店 源码 编辑:程序博客网 时间:2024/04/30 15:40
理解Hibernate中的持久化对象
虽然hibernate采用了低侵入式的设计,我们设计持久化类的时候还是要遵循以下原则:
提供无参的构造器。
提供一个标志属性。
非final的类。
重写eqauls()和hashCode()方法。
hibernate持久化对象支持如下几种状态:
瞬态:对象由new关键字创建,,没有和Session关联。此时对象不会被持久化到数据库,也不会被赋予持久化标志。使用Session可以将其转化成持久化状态。
持久化:持久化的实例在数据库中一对应的记录,并拥有持久化标志。持久化实例可能是刚刚保存,也可能是刚刚加载的,但它必须与特定的Session相关联,此时对该实例的修改会转换成对数据库的修改。
脱管:某实例曾经是持久化状态,但随着Session的关闭,它变成脱管状态。脱管状态的实例再次关联了Session后又可以变成持久化状态。
下图为Hibernate持久化实例的状态演化图
Hibernate Session API:
下列方法将瞬态对象转换成持久化对象
public Serializable save(Object object):将obj对象持久化,即保存到数据库
public void persist(Object object):将obj对象持久化,即保存到数据库
public Serializable save(String entityName, Object object):将obj对象持久化,即保存到数据库,指定主键值
public void persist(String entityName, Object object):将obj对象持久化,即保存到数据库,指定主键值
save()和persist()方法的区别在于,使用save()方法保存持久化对象时,该方法返回该持久化对象的标志属性值(主键值);但使用persist()保存时,不返回任何值。save()方法会立即执行insert操作,而persist()方法保证当它在事务外部被调用时,不立即执行insert操作。
下列方法可以加载一个持久化对象
public Object get(Class clazz, Serializable id)
public Object load(Class theClass, Serializable id)
类似的,get()方法和load()方法的区别在于,get()方法会立即访问数据库,当要加载的数据不存在返回null;而load方法具有延时加载的功能,不会立即访问数据库,当数据不存在时可能返回一个代理对象。
下面的方法用于保存对脱管对象的修改
public void update(Object object)
public Object merge(Object object)
public void saveOrUpdate(Object object)
update()方法和merge()方法的区别在于使用update()方法修改的对象会再次变成持久化状态,而merge()方法不会。
- [学习]Hibernate 3.2学习笔记之四
- Hibernate学习笔记之四
- hibernate学习笔记四
- Hibernate学习笔记四
- hibernate学习笔记(四)
- hibernate学习笔记四
- hibernate学习笔记四
- hibernate学习笔记之四(Hibernate中的类型)
- Hibernate学习笔记(四)
- Hibernate学习笔记(四)
- hibernate学习笔记(四)
- Hibernate学习笔记(四)
- Hibernate学习笔记(四)
- [学习]Hibernate 3.2 学习笔记之二
- [学习]Hibernate 3.2 学习笔记之三
- [学习]Hibernate 3.2 学习笔记之五
- [学习]Hibernate 3.2 学习笔记之六
- [学习]Hibernate 3.2 学习笔记之七
- poj2499
- 持续关注的博文/网站
- 必须掌握的八个【cmd 命令行】
- 腾讯php程序员面试题目
- 如何编译Linux内核
- [学习]Hibernate 3.2学习笔记之四
- 最好的通用式silverlight载入界面
- pku1265 pick定理 多边形面积
- hDC 转 HWD
- 【转载】hashcode()和equals()的区别
- WCDMA
- IT人的三种人生境界:从网管到CIO
- 一. 图模型(graphical model, GM)的表示
- ED Hardy prosecution or formal wear