Hibernate对象状态

本文详细介绍了对象关系映射(ORM)中对象的四种状态:瞬时状态、持久化状态、游离状态和删除状态,并通过实例解释了各状态的转换及特点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

      1) 瞬时状态Transient

            1> 和数据库记录没有关系,和session没有关系

            2> 来源:new出来的对象就是瞬时状态(因为也就是在内存中,和数据库没关系,所以瞬间就没了微笑

            3>  转化为持久化状态:save、saveOrUpdate

            4>  说明:对瞬时状态的对象进行任何操作都不会影响数据库

      2)持久化状态Persistent

            1>  和数据库记录有关系,和session有关系

            2>  来源:瞬时状态对象通过save,或者执行查询(如get、load等)

            3>  说明:对持久化状态的对象进行操作,Hibernate都可以自动检测到,然后通过sql语句影响到数据库中记录

            4>  例子

                 I.  修改例子:

         User user = new User();
         user.setName("sky");
         session.save(user);
         user.setName("moon");
            结果为:

        Hibernate: insert into t_user (name) values (?)
        Hibernate: update t_user set name=? where id=?
               数据库中显示的名字为moon

           说明对持久化状态对象进行操作都可以影响到数据库中记录

               II. 生成id例子

        User user = new User();
        user.setName("sky");
        System.out.println(user.getId());
        session.save(user);
        System.out.println(user.getId());
             结果为:

       0
       Hibernate: insert into t_user (name) values (?)
       12
            可以看出:持久化状态的对象都是有id的
            III.  执行时机例子

       User user = new User();
       user.setName("sky");
       System.out.println("--------");
       session.save(user);
       System.out.println("-----------");
            结果为:

      --------
      Hibernate: insert into t_user (name) values (?)
     -----------
          可以看出:执行save方法后,就立即执行sql更新数据库,而不是等待commit的时候再一次执行(因为要生成id)

      3)游离状态Detached 

           1>  和数据库中记录有关系,和session没有关系

           2>  来源:session通过关闭或者剔除操作,将持久状态对象从session中剔除出来(close,clear,evict)

           3>  说明:因为和session无关了,对游离状态对象的操作不能影响数据库中的记录

      4) 删除状态

          1>  和数据库中记录无关系,和session有关系

          2>  来源,session通过delete方法从数据库中删除对象之后对象的状态








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值