A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© ziyangfgt 中级黑马   /  2017-6-18 15:09  /  487 人查看  /  0 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

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);  //脱管态

}

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马