当程序用new创建一个对象时,这个对象的生命周期就开始了,当不在有任何引用变量引用它时,对象就结束生命周期,JVM的垃圾回收器就会回收它占用的内存。
对于需要持久化的类,它的生命可能会处于以下三种状态。
一.临时状态。用new创建,但还没有被持久化,没有在session缓存中。
二.持久状态。已经持久化,出于Session缓存中。
三.游离状态。已经持久化,但不处于session缓存中。
例子:
Session session = getHibernateTemplate().getSessionFactory()
.openSession();
Transaction tr = null;
Grade grade = null;
try {
tr = session.beginTransaction();
//对象开始生命周期,临时状态。
grade = new Grade();
//处于生命周期中,转变成持久化状态。
session.save(grade);
//在生命周期中,处于持久化状态。
grade.setGrade(111);
tr.commit();
//session.flush()
} catch (Exception e) {
if (null != tr)
tr.rollback();
} finally {
//处于生命周期中,转换成游离状态
session.close();
}
//在生命周期中,处于游离状态
int num = grade.getGrade();
//结束生命周期
grade = null;
注:
Session.flush()方法和commit()方法的区别:
flush()会进行清理缓存的操作,会执行SQL语句。commit()方法首先调用flush()方法,然后提交事务。提交事务意味着数据库的修改被永久的保存下来。
临时状态和游离状态的区别:
两者都与session没有关联,游离状态时从持久化状态转换过来的,因此在数据库中有相应的记录,而临时状态在数据库中没有相应的记录。
分享到:
相关推荐
8.3 Java对象在Hibernate持久化层的状态 8.3.1 临时对象的特征 8.3.2 持久化对象的特征 8.3.3 被删除对象的特征 8.3.4 游离对象的特征 8.4 Session接口的详细用法 8.4.1 Session的save()和persist()...
Hibernate持久化对象的生命周期 持久化对象的状态: 瞬时对象(Transient Objects)持久化对象(Persist Objects)、离线对象(Detached ...在Hibernate应用中Java对象的状态 Session的保存、更新、删除、查询方法:
8.3 Java对象在Hibernate持久化层的状态 8.3.1 临时对象的特征 8.3.2 持久化对象的特征 8.3.3 被删除对象的特征 8.3.4 游离对象的特征 8.4 Session接口的详细用法 8.4.1 Session的save()和persist()...
8.3 Java对象在Hibernate持久化层的状态 8.3.1 临时对象的特征 8.3.2 持久化对象的特征 8.3.3 被删除对象的特征 8.3.4 游离对象的特征 8.4 Session接口的详细用法 8.4.1 Session的save()和persist()...
8.3 Java对象在Hibernate持久化层的状态 8.3.1 临时对象的特征 8.3.2 持久化对象的特征 8.3.3 被删除对象的特征 8.3.4 游离对象的特征 8.4 Session接口的详细用法 8.4.1 Session的save()和persist()...
本章站在持久化层的角度,Java对象在生命周期中可处于临时状态、持久化状态、删除状态和游离状态。处于持久化状态的Java对象位于一个Session实例的缓存中,Session能根据这个对象的属性变化来同步更新数据库。 8.1 ...
本章站在持久化层的角度,Java对象在生命周期中可处于临时状态、持久化状态、删除状态和游离状态。处于持久化状态的Java对象位于一个Session实例的缓存中,Session能根据这个对象的属性变化来同步更新数据库。 8.1 ...
1.2. 第一部分 - 第一个Hibernate应用程序 1.2.1. 第一个class 1.2.2. 映射文件 1.2.3. Hibernate配置 1.2.4. 用Ant构建 1.2.5. 启动和辅助类 1.2.6. 加载并存储对象 1.3. 第二部分 - 关联映射 1.3.1. ...
当清理缓存时,Hibernate会根据缓存中对象的状态变化来同步更新数据库。 Session为应用程序提供了两个管理缓存的方法: evict(Object obj):从缓存中清除参数指定的持久化对象。 clear():清空缓存中所有持久化对象...
1.2. 第一部分 - 第一个Hibernate应用程序 1.2.1. 第一个class 1.2.2. 映射文件 1.2.3. Hibernate配置 1.2.4. 用Ant构建 1.2.5. 启动和辅助类 1.2.6. 加载并存储对象 1.3. 第二部分 - 关联映射 1.3.1. ...
10.1.2 Hibernate应用程序中的事务 10.1.3 使用Java Persistence的事务 10.2 控制并发访问 10.2.1 理解数据库级并发 10.2.2 乐观并发控制 10.2.3 获得额外的隔离性保证 10.3 非事务数据...
1.2. 第一部分 - 第一个Hibernate应用程序 1.2.1. 第一个class 1.2.2. 映射文件 1.2.3. Hibernate配置 1.2.4. 用Ant构建 1.2.5. 启动和辅助类 1.2.6. 加载并存储对象 1.3. 第二部分 - 关联映射 1.3.1. ...
(2)J2EE 平台中的哪些开源框架 S2SH——Struts2、Spring 和 Hibernate 等表现层框架、应用层框架和持久层框架。 1.1.2 第二周 课程(9 月 11 日)的课后作业及参考解答 1、请用 Java 程序示例说明什么是 Java 中...
通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥,通常应对私钥加密后再保存、如何从...
1.2. 第一部分 - 第一个Hibernate应用程序 1.2.1. 第一个class 1.2.2. 映射文件 1.2.3. Hibernate配置 1.2.4. 用Ant构建 1.2.5. 启动和辅助类 1.2.6. 加载并存储对象 1.3. 第二部分 - 关联映射 1.3.1. ...
10.1. Hibernate对象状态(object states) 10.2. 使对象持久化 10.3. 装载对象 10.4. 查询 10.4.1. 执行查询 10.4.1.1. 迭代式获取结果(Iterating results) 10.4.1.2. 返回元组(tuples)的查询 10.4.1.3. 标量(Scalar)...
通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥,通常应对私钥加密后再保存、如何从...
通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥,通常应对私钥加密后再保存、如何从...
通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥,通常应对私钥加密后再保存、如何从...