hibernate规定三种状态:瞬时态、持久态、脱管态
瞬时态:transient,session没有缓存对象,数据库也没有对应记录。
OID特点:没有值
持久态:persistent,session缓存对象,数据库最终会有记录。(事务没有提交)
OID特点:有值
脱管态:detached,session没有缓存对象,数据库有记录。
OID特点:有值
二、转换
三、 瞬时态/临时态
获取:一般都只直接创建(new)
瞬时态转换持久态
一般操作:save方法、saveOrUpdate
瞬时态转换脱管态
一般操作:通过setId方法设置数据
例如:
User user = new User();//瞬时态
user.setUid(1);//脱管态
四、持久态
l 获得:
查询操作:get、loat、createQuery、createCriteria等 获得都是持久态【】
执行save之后持久态
执行update之后持久态
l 持久态转换瞬时态
官方规定执行delete() --民间:删除态
l 持久态转换脱管态
session没有记录
session.close () 关闭
session.clear()清除所有
session.evict(obj)清除指定的PO对象
五、脱管态/游离态
l 获得:
创建、并设置OID的
通过api获得
脱管态转换瞬时态
手动去除OID,设置成默认值
脱管态转换持久态
一般操作:update()、saveOrUpdate
@Test
public void demo01(){
User user = new User();//瞬时态
user.setUsername("jack");
user.setPassword("1234");//瞬时态(与oid没有关系)
Session session = factory.openSession();
session.beginTransaction();
session.save(user);//持久态
//----持久态就应该有持久态的行为(特性)
//user.setUsername("rose"); //持久态对象 被修改后,hibernate将自动生成update语句
//session.flush();
session.getTransaction().commit();
session.close();
System.out.println(user); //脱管态
}
|
|