hibernate对象生命周期内的三种状态 1. transient(自由状态) 自由状态就是java对象创建出来,在内存中自由存在,与数据记录无关 2. Persistent(持久状态) 持久状态就是处于hibernate框架所管理的状态。这种状态下,实体对象的引用被hibernate容器加以管理。 3. Detached(游离状态) 游离状态就是在java对象所对应的session实例关闭后所处的状态 处于自由状态的对象,可以通过Session.save()转换为持久状态,同样,一个对象由Session.load()加载,也处于持久状态 Session可以看作是持久状态对象的宿主。如果Session失效,则对象就变为游离状态 Session.delete()可以使处于持久状态的对象变为自由状态 自由状态与游离状态区别 处于游离状态的对象可以再次同Session关联变为持久状态 OrderItem oi = new OrderItem(); oi.setItemNum(1); oi.setOrderDetail( "TV set" ); oi.setOrderSeri( "12345" );
Session session = sessionFactory.openSession(); Transaction tx = session.beginTransaction(); session.save(oi); tx.commit(); session.close(); 此时,oi处于游离状态
在另外一段代码中出现 Session session2 = sessionFactory.openSession(); Transaction tx2 = session.beginTransaction(); session2.update(oi); oi.setOrderDetail( "television" ); tx2.commit(); session2.close(); 此时,当session2.update(oi)执行后,再执行oi.setOrderDetail(),可以发现数据库中的数据已经改变了,而我们并没有显示的将oi变为持久状态 自由状态与数据库记录无关,我们不能通过处于自由状态的对象来搜索数据库。而处于游离状态的对象虽然与Session脱离,但是我们可以通过它来寻找数据库中相应的记录 
|