黑马程序员技术交流社区

标题: hibernate中的对象状态 [打印本页]

作者: ziyangfgt    时间: 2017-6-18 15:09
标题: hibernate中的对象状态
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);  //脱管态

}





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2