Hibernate中关于对象状态的介绍
来源:互联网 发布:成都 德勤 咨询 知乎 编辑:程序博客网 时间:2024/06/05 15:37
对象状态介绍:
- 瞬时/临时状态(Transient Objects)
使用new操作符初始化的对象不是立刻就持久化的,他们的状态是瞬时的。
(1)不处于Session的缓存中,也可以说,不被任何一个Session实例关联。
(2)在数据库中没有对应的记录。
- 持久化状态(Persist Objects)
持久实例是任何具有数据库标识的实例。它有持久化管理器Session统一管理,持久实例是在事务中进行操作的———他们的状态在事务结束时同数据库进行同步。
(1)位于一个Session实例的缓存中,也可以说,持久化对象总是被一个Session实例关联。
(2)持久化对象和数据库中的相关记录对应。
(3) Session在清理缓存时,会根据持久化对象的属性变化,来同步更新数据库。
- 离线/游离对象(Detached Objects)
Session关闭之后,持久化对象就变为离线对象。离线表示这个对象不能再与数据库保持同步,他们不再受Hibernate管理。
(1)不再位于Session的缓存中,也可以说,游离对象不被Session关联。
(2)游离对象是由持久化对象转变过来的,因此在数据库中可能还存在与它对应的记录
(前提条件是没有其他程序删除了这条记录)。
示例代码:
public classAppTest {
staticSessionFactory sessionFactory=null;
static{
sessionFactory=newConfiguration()
.configure()//加载Hibernate主配置文件hibernate.cfg.xml
.buildSessionFactory();//得到SessionFactory实例对象
}
@Test
public voidtestStatus(){
Session session=sessionFactory.openSession();
session.beginTransaction();//开启事务
/*-------------------执行操作----------------------*/
Student stu=newStudent();//new一个对象,临时状态,不处于session的管理范围,数据库中没有对应记录
stu.setName("zhangsan");
stu.setAge(20);
stu.setSex("male");
session.save(stu);//持久状态,处于session的管理范围,数据库中有对应记录
stu.setName("wangwu....");//会执行update操作
session.getTransaction().commit();//提交事务
session.close();//关闭session
stu.setName("zhangsan----");//游离状态,不处于session管理范围,数据库中可能有对应记录
System.out.println("输出结果=="+stu.getName());
}
/*游离状态-------->持久化状态*/
@Test
public voidtestChange(){
Session session=sessionFactory.openSession();
session.beginTransaction();
Student student=newStudent();
student.setId(1);//游离状态,数据库中存在id为1的记录
session.update(student);//转换为持久化状态
student.setName("xiaowang");//执行更新,反应到数据库
session.getTransaction().commit();
session.close();
}
}
- Hibernate中关于对象状态的介绍
- 关于hibernate中对象的三种状态分析
- 关于hibernate中对象的三种状态分析
- 关于hibernate中对象的三种状态分析
- 关于hibernate中对象的三种状态分析
- 关于hibernate中对象的三种状态分析
- 关于hibernate中对象的三种状态分析
- 关于hibernate中对象的三种状态分析
- 关于hibernate中对象的三种状态分析
- 关于hibernate中对象的三种状态分析
- 关于hibernate中对象的三种状态分析
- 关于hibernate中对象的三种状态分析
- 关于hibernate中对象的三种状态分析
- Hibernate中对象的状态
- hibernate中对象的状态
- Hibernate中对象的状态
- 关于Hibernate的对象状态转变描述
- Hibernate中对象状态
- Ubuntu 16.04 安装 JDK 及 Eclipse 详细步骤
- JavaScript基础(一)
- hust1017-Exact cover 舞蹈链之精确覆盖(裸的)
- 用自己的机器人和ubuntu PC实现通信和控制
- JavaScript基础(二)
- Hibernate中关于对象状态的介绍
- vc++6.0项目属性在哪
- Android项目之SD卡
- +QQ:2500953355全国到付
- 图像处理中Stride的理解
- READING NOTE: Adversarial Discriminative Domain Adaptation
- 使用多个框架导致多个jar包包含同样的文件
- C++文件读写详解(ofstream,ifstream,fstream)
- 如何灵活控制log4j日志输出级别