3.hibernate的对象的三种状态

1.瞬时对象(transientObjects):由我们自己创建出来,数据库中没有相应的记录,也没有被hibernate的Session管理起来,这样的对象可以被jvm回收的。

2.持久化对象(persistentObjects)这个对象在数据库中有相应的记录,这个对象被Session管理起来。

3.脱管对象(detachObjects):数据库中有相应的记录,但是没有被Session管理

 

1.瞬时对象转换成持久对象

 对持久对象的修改

2.持久对象和脱管对象的转换

public class TestHibernate {
	@Test
	public void test1(){
		//创建session
		Session session = HibernateUtils.getSession();
		//开启事物
		Transaction tx = session.beginTransaction();
		User user = new User();
		try {
			user.setUserId(1);
			user.setUname("zhangyan");
			user.setGender(1);
			user.setBirthday(new Date());
			session.save(user);
			tx.commit();
		} catch (Exception e) {
			e.printStackTrace();
			tx.rollback();
		}finally{
			//Session关闭,那么user由持久对象变成脱管对象,在创建session也无法改变值
			HibernateUtils.closeSession(session);
		}
		
		Session session1 = HibernateUtils.getSession();
		Transaction tx1 = session1.beginTransaction();
		
		try{
		user.setUname("zhang");
		//Session1接纳了user,立即把user变成持久对象
		session1.update(user);
		//一提交就会发出update的sql
		tx1.commit();
	} catch (Exception e) {
		e.printStackTrace();
		tx1.rollback();
	}finally{
		HibernateUtils.closeResource(session1);
	}
	}

3.通过get和load和iterator查询出来的对象是持久状态

查询不需要开启事物,在这里我们提供toString方法打印user。

5代表数据库的第5条数据

如何证明get发出来的是持久对象呢?

可以在写user.setUname("xxx");发出update语句,证明是持久对象。

 

4.持久和脱管对象转换瞬时delete()

通过delete把数据库中的数据删除,而且清掉Session中的对象,那么这个对象就变成了瞬时对象

提交的时候才会发出delete的sql

猜你喜欢

转载自blog.csdn.net/weixin_44199723/article/details/86512014