Hibernate学习笔记 之 持久化对象的状态
2016-11-16 19:41
330 查看
瞬态、持久态、脱管 概念见:http://blog.csdn.net/fanfan4569/article/details/53054683
一、持久化实体
save() 方法 与 persist()
注:save() 带返回值
注:persist() 不带返回值
区别:
save()方法需要立即返回持久化对象的标识属性值,所以程序执行save()方法会立即将持久化对象对应的数据插入数据库;而persist()则保证当它在一个事务外部被调用时,并不立即转换insert语句。这个功能是很有用的,尤其是需要一个长会话流程的时候,persist()方法就显得尤为重要。
二、根据主键加载持久化实体
load() 与 get()
User user = session.get(User.class, "4028dc8158432b8a0158432b8c240000"); User user = session.load(User.class, "4028dc8158432b8a0158432b8c240000");
如果没有匹配的数据库记录,load()方法可能抛出HibernateException()异常;如果在持久化注释中指定了延迟加载,则load()方法会返回一个未初始化的代理对象(可以理解为持久化对象的替身),这个代理对象并没有加载数据记录,知道程序调用该代理对象的某方法时,Hibernate才会去访问数据库。(如果希望在某对象中创建一个指向另一个对象的关联,又不想从数据库中装载该对象的同时立即装载所关联的对象,延迟加载方式就很有用。)
get()方法会立刻访问数据库,如果没有对应的记录,get()方法返回null,而不是返回一个代理对象。
二、更新持久化实体
User user = session.load("User.class", "4028dc8158432b8a0158432b8c240000"); user.setAddress("中国"); session.flush();
这上面相当于一条查询指定记录的select语句,另一条用于修改该记录的update语句。
Hibernate通常的处理流程是:从数据库里加载记录—>将信息范松到表现层供用户修改—->将所做修改重新保存到数据库。需要2条SQL语句。
三、更新脱管实体
User user = firtstSession.load("User.class", "4028dc8158432b8a0158432b8c240000"); user.setAddress("中国"); Session secondSession = ... //保存脱管对象所做的修改 secondSession.update(user);
如果不清楚该对象是否曾经持久化过,可以选择使用updateOrSave()
merge()方法也可将程序对脱管对象所做的修改保存到数据库。区别在于session.update(user),user对象会变成持久化状态;而执行session.merge(user),user对象依然不是持久化状态,user对象依然不会被关联到Session上,merge()方法会返回user对象的副本——-该副本处于持久化状态。
//使用load()或get()方法加载持久化对象时,还可指定一个“锁模式” //LockOptions对象代表“所模式”,LockOptions提供READ和UPGRADE两个静态属性来代表共享、修改锁 User user = Session.get(User.class, pk, LockOptions.UPGRADE);
Session.LockRequest()的lock()方法也将某个脱管对象重新持久化,但该脱管对象必须是没有修改过的!
四、删除持久化实体
User user = session.load("User.class", "4028dc8158432b8a0158432b8c240000"); session.delete(user);
一旦删除了该持久化实例,该持久化实例对应的数据记录也将被删除;
相关文章推荐
- Hibernate学习笔记2--持久化对象的状态
- Hibernate学习笔记 - Hibernate中持久化对象的状态转换规则
- Hibernate学习-11:持久化对象状态及状态转换、持久态对象自动更新数据库
- Hibernate的学习之路十(持久化对象的三个状态)
- 深入学习Hibernate持久化对象的三个状态
- Hibernate的学习之路十(持久化对象的三个状态)
- HIbernate学习笔记(二) hibernate对象的三种状态与核心开发接口
- Hibernate的学习之路十(持久化对象的三个状态)
- Hibernate的学习之路十(持久化对象的三个状态)
- Hibernate的学习之路十(持久化对象的三个状态)
- 【Hibernate框架学习】:Hibernate进阶之持久化对象状态
- Hibernate的学习之路十(持久化对象的三个状态)
- 【学习笔记】Hibernate中对象的状态和转换以及Session的主要方法总结
- 深入学习Hibernate4_05hibernate中对象的四种状态(临时状态,持久化状态,游离状态,删除状态),以及常用方法的介绍
- Hibernate的学习之路十(持久化对象的三个状态)
- hibernate3.3.2学习笔记---三种对象状态&删除数据&获取数据库对象&更新数据库对象
- Hibernate的学习之路十(持久化对象的三个状态)
- Hibernate学习笔记---1.java对象持久化技术
- Hibernate学习笔记 -- day05 缓存、快照机制、对象状态