Hibernate对象状态与缓存

目录

1、Hibernate对象的状态

1.1临时对象(transient)

1.2 删除对象(Removed)

1.3持久化对象

1.4游离对象

1.5图解hibernate中java对象的状态

1.6测试代码

2、Hibernate的加载策略

2.1 get和load的区别(立即加载和延迟加载)

2.2 类级别和关联级别的检索

3、Hibernate缓存

3.1 Hibernate的一级缓存

3.2 Hibernate的二级缓存


1、Hibernate对象的状态

在hibernate中java对象的状态,Hibernate 把对象分为 4 种状态:  持久状态(对象), 临时状态(对象), 游离状态(对象), 删除状态(对象)。

Session 的特定方法能使对象从一个状态转换到另一个状态。

1.1临时对象(transient)

OID 为 null

不处于 Session 的缓存中

在数据库中没有对应的记录

1.2 删除对象(Removed)

OID 不为 null

从一个 Session实例的缓存中删除

Session 已经计划将其从数据库删除, 事务提交后, 会执行 SQL delete 语句, 删除数据库中的对应记录

一般情况下, 应用程序不该再使用被删除的对象

1.3持久化对象

OID 不为 null

位于 Session 缓存中

持久化对象和数据库中的相关记录对应

Session 在清理缓存时, 会根据持久化对象的属性变化, 来同步更新数据库

在同一个 Session 实例的缓存中, 数据库表中的每条记录只对应唯一的持久化对象

1.4游离对象

OID 不为 null

不处于 Session 的缓存中

一般情况需下, 游离对象是由持久化对象转变过来的, 因此在数据库中可能还存在与它对应的记录

1.5图解hibernate中java对象的状态

程序代码

生命周期

状态

tx = session.beginTransaction();

Customer c = new Customer);

开始生命周期

临时对象

Session.save(c)

处于生命周期中

转变为持久化对象

Long id=c.getId();

c = null;

Customer c2 = (Customer)session.get(Customer.class,id);

tx.commit();

处于生命周期中

处于持久化对象

session.close();

处于生命周期中

转变为游离对象

c2.getName();

处于生命周期中

游离对象

c2 = null;

结束生命周期

结束生命周期

1.6测试代码

public class HeroDao1 {

   @Test

   public void test1(){

      Session session = HibernateUtils.getSession();

      //临时状态

      Hero hero = new Hero("黄忠",2222.22);

      session.getTransaction().begin();

      //持久状态

      session.save(hero);

      //游离状态

      //session.evict(hero);

      //删除状态

      //session.delete(hero);

      //System.out.println(hero.getId());

      session.getTransaction().commit();

      HibernateUtils.closeSession();

   }

   @Test

   public void test2(){

      Session session = HibernateUtils.getSession();

      //

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

棉花糖老丫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值