Hibernate对象状态

Hibernate对象有三种状态:

瞬时状态(Transient):对象新创建的时候,失去引用时被JVM回收; 可通过save方法进入持久状态

持久状态(Persistent):通过save方法之后进入持久状态,在数据库与缓存中有记录; session关闭进入脱管状态

脱管状态(Detached):在数据库中有记录,缓存中没有; 可通过load,get,或查询再次进入持久状态;或者当本session关闭后,重新打开一session,并调用update方法使对象进入持久状态。

对象状态变化图:

示例:

public void testQuery3() {
		Session session = null;
		try {
			session = HibernateUtils.getSession();
			session.beginTransaction();
			List list = session.createQuery("select s from Student s where s.id=3").list();
			for (Iterator iterator = list.iterator(); iterator.hasNext();) {
				Student object = (Student) iterator.next();
				System.out.println(object.getName());
				object.setName("yeyeyeye");
				
			}
			session.getTransaction().commit();
			
		}catch(Exception e) {
			e.printStackTrace();
			session.getTransaction().rollback();
		}finally {
			HibernateUtils.closeSession(session);
		}				
	}
	
	public void testQuery4() {
		Session session = null;
		try {
			session = HibernateUtils.getSession();
			session.beginTransaction();
			Student s = (Student)session.load(Student.class, 3);
			System.out.println("从数据库load>>>" + s.getName());
			s.setName("444");
			System.out.println("load完后进入持久状态,调用setName方法,更新数据库>>>" + s.getName());
			session.getTransaction().commit();
			
			session.beginTransaction();
			session.update(s);
			s.setName("yyyy");
			System.out.println("在另一个session中利用update方法再次使对象进入持久状态,并调用setName方法,更新数据库>>>" + s.getName());
			session.getTransaction().commit();
			
		}catch(Exception e) {
			e.printStackTrace();
			session.getTransaction().rollback();
		}finally {
			HibernateUtils.closeSession(session);
		}				
	}

 

第一个示例通过查询使对象进入持久状态,更调用setName进行更新。注意这里更新可以不调用update方法的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值