hibernate对象状态

hibernate中对象状态

  • hibernate对象分为三种状态
    • 瞬时状态
      • 没有id,没有在session缓存中 (在实体对象new出来的时候,内存中开辟内存空间的对象,不存在持久化表示的ID(相当于表中的主键值),没有和 hibernate session关联,在数据库中也没有记录,失去引用后被JVM垃圾回收机制回收.瞬时状态的对象是在内存中独立存在的,与数据库中的数据没有任何关联)
    • 持久化状态
      • 有id,在session缓存中 (持久化对象存在持久化标识ID,加入到了session缓存中,并且相关联的session没有关闭,在数据库中有对应的记录,每条记录只能对应唯一 的持久化对象,要注意,持久化对象是在事物还没有提交前变成持久化的)
    • 游离状态(托管状态)
      • 有id没有在session缓存中 (游离状态也可以叫做托管状态,当某一个持久化状态的实例与session的关联被关闭是就变成了游离状态.游离状态对象在持久化ID,并且依然与数据库中的数据库在存在关联,只是失去了当前session的关联,游离状态发生改变时hibernate不能检测到)

下面是图片捋一下从中的关系:

Created with Raphaël 2.1.0 对象 对象 瞬时状态 瞬时状态 持久化状态 持久化状态 游离状态 游离状态 new() save(),saveOrUpdate() close(),evict(),clear() update(),saveOrUpdate(),lock() delete() get(),find(),iterate(),etc()

从图中可以看出,当一个对象被执行new 关键字创建后,对象出于瞬时状态,当对瞬时状态对象执行save(),saveOrUpdate()方法后,把改对象放到session的一级缓存中(hibernate一级缓存会在<

User u = new User();瞬时状态
u.setId(1);//游离状态

持久化状态对象能够自动更新到数据库

  • 上面我一级介绍了hibernate对象的三中状态,其实我们主要是去研究持久化状态就够了, 持久化状态对象有一个非常重要的特性:持久化对象可以自动更新到数据库
@Test
public void demo(){
    Session session = HibernateUtils.getCurrentSession();
    Transaction tx = session.beginTransaction();
    //获得持久化对象
    User u = session.get(User.class,1l)//1L因为我的ID是long类型的
    u.setName("张三");
    //session.update(u);//不用手动调用update方法就可以更新数据库
    tx.commit();
    session.close();
}

执行测试我们会发现,我们没有调用update方法, Hibernate就可以讲数据库制动更新. 持久化对象就有这样的一个功能,持久化对象能有这样的一个功能都是依赖Hibernate的一级缓存.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值