SSH与SSM学习之hibernate09——对象的三种状态
一、对象的三种状态
hibernate中,对象拥有三种状态:瞬时状态、持久化状态、游离|托管状态。
1.1 瞬时状态
瞬时状态:没有id,没有在session缓存中。
例如下面的user实例就是 瞬时状态
User user = new User();// 瞬时状态。没有id,没有与session 关联
user.setName("xiaoming");// 瞬时状态。没有id,没有与session 关联
user.setAge(19);// 瞬时状态。没有id,没有与session 关联
1.2 持久化状态
持久化状态:有id,在session缓存中。
例如下面的user实例就是 瞬时状态
session.save(user);//持久化状态。有id,与session关联
或
User user = session.get(User.class,1);// 持久化状态。有id,与session关联
1.3 游离|托管状态
游离|托管状态:有id,没有在session缓存中。
例如下面的user实例就是 瞬时状态
User user = new User();// 瞬时状态。没有id,没有与session 关联
user.setName("xiaoming");// 瞬时状态。没有id,没有与session 关联
user.setAge(19);// 瞬时状态。没有id,没有与session 关联
session.save(user);//持久化状态。有id,与session关联
//--------------------------------------------
//3.提交事务
t.commit();
//4.关闭资源
session.close();//游离|托管状态。有id,没有与session关联
二、持久化状态对象的任何变化都会自动同步到数据库中
例如下面的例子
/*
三种状态特点
持久化状态特点: 持久化状态对象的任何变化都会自动同步到数据库中.
*/
@Test
public void statusDemo3(){
//1.获取Session
Session session = HibernateUtils.openSession();
//2.开启事务
Transaction t = session.beginTransaction();
//-------------------------------------------
User user = session.get(User.class,1);// 持久化状态。有id,与session关联
System.out.println("修改name属性前---"+user);
user.setName("杞文明");//持久化状态。有id,与session关联
user = session.get(User.class,1);// 持久化状态。有id,与session关联
System.out.println("修改name属性后---"+user);
//--------------------------------------------
//3.提交事务
t.commit();
//4.关闭资源
session.close();//游离|托管状态。有id,没有与session关联
}
打印结果
修改name属性前---User{id=1, name='xiaoming', age=19}
修改name属性后---User{id=1, name='杞文明', age=19}
HibernateUtils.java
package com.qwm.hibernate02;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
/**
* @author:qiwenming
* @date:2017/9/17 0017 2:39
* @description:
* Hibernate工具类
*/
public class HibernateUtils {
private static SessionFactory factory;
static{
//1 创建,调用空参构造
Configuration conf = new Configuration().configure();
//2 根据配置信息,创建 SessionFactory对象
factory = conf.buildSessionFactory();
}
//获得session => 获得全新session
public static Session openSession(){
//3 获得session
Session session = factory.openSession();
return session;
}
//获得session => 获得与线程绑定的session
public static Session getCurrentSession(){
//3 获得session
Session session = factory.getCurrentSession();
return session;
}
}