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(); }