`

hibernate实体生命周期

阅读更多

1:自由状态(Transient) 
     自由状态(Transient),是指实体对象在内存中自由存在,他与数据库的记录无关。

如:

TUser user = new TUser(); 
user.setName("MyName"); 

 

这里的user对象只是一个非常普通的java对象,与数据库中的记录没有任何关系。
2:持久状态(Persistent)

     持久状态(Persistent),即实体对象处于Hibernate框架的管理状态,实体对象被纳入Hibernate的实体容器中管理。处于持久状态的对象,其更变将由Hibernate固化到数据库中。

如:

TUser user_1 = new TUser(); 
TUser user_2 = new TUser(); 
user_1.setName("Name_1"); 
user_2.setName("Name_2"); 
Transaction tx = session.begintransaction();
session.save(user_1); 

 通过session的save方法,user_1对象已经被纳入Hibernate的实体管理容器,处于持久化状 //态(Persistent),这时候对user_1对象的任何修改都将被同步到数据库中。 tx.commit(); //而user_2仍然才处于自由状态(Transient),不受Hibernate框架的管理。
从上面看到,处于自由状态的实体对象,可以通过Hibernate的Session.sava方法转化为持久状态。
除了用Session.save方法外,还可以通过其他方法来获取一个持久状态的对象,那就是直接通过Hibernate加载的对象,通过Session.load方法,可以直接加载一个处于持久状态的实体对象。如下:
TUser user = Session.load(TUser.class,new Integer(1)); //在load方法没返回之前,就已经先把对象纳入Hibernate的管理范围,所以这里的user //已经处于持久状态。
从上面的代码可以看出,处于持久状态的实体对象一定要和Session关联,并处于该Session的有效期内。
 3:游离状态(Detached)

 处于持久状态的实体对象,在其关联的Session关闭以后,此实体对象就处于游离状态,
 

TUser user = new TUser(); 
user.setName("name_1"); 
Transaction tx = session.begintransaction(); 
session.save(user); 

//把自由状态的实体对象user转为持久状态, tx.commit();

session.close(); //session关闭以后,处于持久状态的实体对象user将转为游离状态。

//因为此时user已经和session脱离关系。

 三种状态的转化
自由状态-->持久状态:可以通过Session.sava方法来转换。
持久状态-->游离状态:可以通过Session.close方法来关闭session,获取游离状态的对象
持久状态-->自由状态:可以通过Session.delete方法来删除实体对象对应的数据库记录,使实体对象处于自由状态。

文章出处:DIY部落(http://www.diybl.com/course/3_program/java/javajs/20090204/154816.html)

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics