读书人

造型理解hibernate中对象三种状态

发布时间: 2012-10-06 17:34:01 作者: rapoo

形象理解hibernate中对象三种状态

public class QueryTest {/*** * 形象理解Hibernate的三种状态 * Transient(瞬时态):DB无记录,和Session无关(有内在状态,无外在状态,不需要同步)     * Persistent(持久态):DB有记录,和Session有关(有内在状态,有外在状态,Session作同步)     * Detached(脱管态):DB有记录,和Session无关(有内在状态,有外在状态,手工同步)     * 下面以一段Hibernate新增数据操作为例,让我们真正明白到底什么是Hibernate对象的三种状态 * @param args * 2010-3-24 */public static void main(String args[]){//==========================瞬时态User u=new User();u.setName("wangwei");//当程序new一个对象时,这时它还没有和Session关联,数据库中也没有这个对象的记录, //此时该对象的状态就被称为“瞬时态”u.setBirthday(new Date());//==========================瞬时态Session session=null;Transaction tx=null;try{session=HibernateUtil.getSession();tx=session.beginTransaction();//==========================持久态session.save(u);        //当session调用save()方法后,此时hibernate session中会有该对象,数据库也会有该对象的数据库(如果没有提交,数据库会自动回滚数据)u.setName("wangyechun");//在“瞬时态”中当对象状态发生改变时(也就是说对象中有属性值发生了改变),Hibernate 会同步更新该对象对应数据库中的状态。//hibernate这时我会生成一条插入和更新的语句来完成session和数据库的同步//Hibernate: insert into User (name, birthday) values (?, ?)//Hibernate: update User set name=?, birthday=? where id=?//这就是hibernate生成的两条sql语句//==========================持久态tx.commit();}finally{if(session!=null){session.close();}//============================脱管态System.out.println(u.getId());//当session被关闭以后此时的User 对象就变成了脱管状态了,它已经和session无关了  //它和“瞬时态”的区别是:瞬时态id没有值,而脱管态id是有值的。//============================脱管态}}}

?

读书人网 >软件架构设计

热点推荐