hibernate中对象的状态

1.   Transient(临时状态):没有id,[数据库里面没有值对应];

2. Persistent(持久化状态):有id,并且被hibernate管理,[数据库里面有值对应]

3. Detached(游离状态):有id,没有被hibernate管理,[数据里面有值对应]

public void test1() {
    /**
     * 对象的状态:    
     */
        /* 临时状态:此时的stu为临时状态
            临时状态:
            1,new 语句刚创建了一个对象。
            2,删除状态的对象session提交,对象处于临时状态。
         */        
        Student123 stu=new Student123("张三");//临时
        
        Session session = HibernateUtils.getSession();
        Transaction transaction = session.beginTransaction();
        session.save(stu);//持久
        /*持久状态:此时的stu为持久状态
            持久化状态:
            1,save方法把临时对象变成持久化状态,save方法把游离对象变成另一个持久化对象。
            2,get方法返回的对象是持久化状态
            3,load方法返回的对象是持久化状态
            4,Query.list()方法返回的实体对象是持久化状态,在处理大数据量的时候,需要及时清理缓存。
            5,update方法把游离对象变成了持久化对象。
        */
        transaction.commit();
        session.close();
        /*游离状态:此时的stu为游离状态,因为session已经关闭了,但是stu在数据库中,有ID
            游离状态
            1,session.close()方法把所有(关闭的那个session)持久化对象变成游离对象
            2,session.clear()方法把所有(调用clear方法的session)持久化对象变成游离对象
            3,session.evict(Object)方法把指定的持久化对象变成游离对象。
        */
        System.out.println(stu.getId());//游离
    }

4.   Removed(删除状态):有id,没有被hibernate管理, 计划被删除,[数据库里面有值对应]

    public void test2() {    
        Session session = HibernateUtils.getSession();
        Transaction transaction = session.beginTransaction();
        /*
         * ④:即将删除的状态:只有事务提交之后,才能从数据库中删除,即将删除
         * 删除状态:
            delete方法让持久化状态和游离状态变成删除状态。
            但是删除状态的对象必须要等到session刷新,事务提交之后才真正的从数据表里面删除。
         * 
         */
        session.delete(new Student123(1L));
        transaction.commit();
        session.close();
    }
原文地址:https://www.cnblogs.com/zhang-bo/p/6561326.html