hibernate的三种状态
实体类(持久化类)对象是有状态的。
- 为什么实体类对象会有状态?
- 答:由于HIbernate框架是一个先映射,后操作的框架。所谓的状态就是实体类的对象和数据库是否有关联的情况。

Hibernate的持久化类有三种状态:
瞬时态(自由态):与数据库的表没有任何关联关系的实体对象。
- 不存在持久化标识OID(相当于主键),尚未与Hibernate Session关联
持久态:正在与数据库保持连接的关系。
- 存在持久化标识OID,加入到了Session的缓存中,并且相关联的Session没有关闭,在数据库中有对应的记录
- 特点:持久化状态对象的任何改变都会自动同步到数据库中
- 游离态(托管状态):曾经被session操作过,但session失效了。关闭,清除
- 存在持久化标识OID,并且仍然和数据库中的数据存在关联,只是失去了当前和Session的关联
持久化标识OID指的是要和数据库的OID相对应
@Test
public void save(){
//1.获得操作对象
Session session = HibernateUtils.getSession();
//2.打开事务,操作都需要打开事务(增删改)
Transaction transaction = session.beginTransaction();
//3.操作
Customer c=new Customer();//瞬时态
c.setCustName("百度");
session.save(c);//持久态
//4.提交事务
transaction.commit();
//这个时候c,被session操作过了。就和数据库建立关系。
//5.关闭操作类对象session
session.close();//游离状态
}持久化状态对象的任何改变都会自动同步到数据库中
@Test
public void get(){
//1.获得操作对象
Session session = HibernateUtils.getSession();
//通过OID获得对应的记录
Customer customer = session.get(Customer.class,2L);
customer.setCustName="Hello";//因为是持久化状态对象,所以修改的时候会同步
session.close();
//虽然customer是通过session获得的,但session关闭了,游离态
System.out.println(customer.getCustName());
}版权声明:本文为Kato_op原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。