形象理解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是有值的。
			//============================脱管态
		}
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值