Hibernate——三种状态的实例persistent演示

    上篇博客介绍了自己对Hibernate三种状态的理解,这一篇主要是通过实例演示去进一步的理解三种状态。


persistent状态:

    此时的状态持久化对象纳入的session的管理,当提交事物时,数据会和数据库同步,如果有更新的数据将产生更新语句。

			session=HibernateUtils.getSession();
			tx=session.beginTransaction();
			
			//transient状态,此时的对象没有纳入session管理
			user=new User();
			user.setName("张三");
			user.setPassword("123");
			user.setCreateTime(new Date());
			user.setExpireTime(new Date());
			
			//persistent状态
			//persistent状态的对象当对象的属性发生改变的时候
			//hibernate清理缓存(脏数据)的时候,会和数据库同步。
			session.save(user);
			
			user.setName("李四");
			tx.commit();
		} catch (Exception e) {
			e.printStackTrace();
			if (tx!=null) {
				tx.rollback();
			}
		}finally{
			HibernateUtils.closeSession(session);  //关闭session此时是datached状态
		}

产生的SQL语句:



datached状态:

    此时的状态不被数据库管理,但是在数据库中存在相应的数据。在此状态下重新拿一个session进行提交会将状态重新变为persistent状态,会将数据在数据库中更新。

		try {
			session=HibernateUtils.getSession();
			tx=session.beginTransaction();
			
			//transient状态
			user=new User();
			user.setName("张三");
			user.setPassword("123");
			user.setCreateTime(new Date());
			user.setExpireTime(new Date());
			
			//persistent状态
			//persistent状态的对象当对象的属性发生改变的时候
			//hibernate清理缓存(脏数据)的时候,会和数据库同步。
			session.save(user);
			
			user.setName("李四");
			tx.commit();
		} catch (Exception e) {
			e.printStackTrace();
			if (tx!=null) {
				tx.rollback();
			}
		}finally{
			HibernateUtils.closeSession(session);
		}
		//datached状态,重新拿一个session进行提交。
		user.setName("王五");
		try {
			session=HibernateUtils.getSession();
			session.beginTransaction();
			//将datached状态的对象重新纳入session的管理
			//此时将变为persistent状态对象
			session.update(user);
			session.getTransaction().commit();
		} catch (Exception e) { 
			e.printStackTrace();
			session.getTransaction().rollback();
		}finally{
			HibernateUtils.closeSession(session);
		}
产生的SQL语句:



    总之,在persistent状态时会将对象纳入到session的管理,无论对象是插入还是更新都会就将最后的数据同步到数据库,并产生相应的sql语句;当关闭session时处于datached状态,此时如果重新开启一个session会将对象重新纳入到session中,当session提交会将数据提交,并产生对应的更新sql语句。





你可能感兴趣的:(ssh)