hibernate3.2生命周期

当new一个对象时,这个对象就是瞬时对象,此时它们没有跟任何数据库表项关联;

瞬时对象(Transient Object):

使用new操作符初始化的对象不是立刻就持久的,首先是瞬时的,也就是说他们没有任何跟数据库表相关联的行为,只要应用不再引用这些对象(不再被任何其他对象所引用),它们的状态就会丢失,并由垃圾回收机制回收;

 

当一个瞬时对象被save(),update()时,这个对象的状态就变成持久化对象!

持久化对象(Persist Objects):

持久化实例是任何具有数据库标识的实例,它有持久化管理器session统一管理,持久实例是在事务中进行操作;它们的状态在事务结束时同数据库进行同步,当事务提交时,通过执行SQL语句吧内存中的状态同步到数据库中;

当一个持久化执行delete时,状态会由Persist变成Transient!

 

 

当一个对象evict(),close(),clear()时,就会状态由Persist变成Detached!

离线状态(Detached object):
session关闭后,持久化对象会变成离线状态,离线表示这个对象不能再与数据库保持同步,它们也不再受hibernate管理;

当这个离线状态执行Update(),saveOrUpdate(),或lock()方法是,状态会转化到Persistent!

 

看下代码解释:addStudentTest.java:

package cn.keith.hibernate;

import java.util.Date;

import junit.framework.TestCase;

import org.hibernate.Session;
import org.hibernate.Transaction;

import cn.keith.hibernate.hibernateUtil.HibernateUtils;

public class StudentTest extends TestCase {
	/***
	 * 一个操作对应一个session,Transaction
	 */
	public void addStudentTest() {
		Session session = null;
		Transaction ts = null;
		Student student = null;
		try {
			// 获取session
			session = HibernateUtils.getSession();
			// 开启事务
			ts = session.beginTransaction();

			// 这时hibernate是Transient(暂停的,路过的)状态
			student = new Student();
			student.setName("keith");
			student.setBirthday(new Date());

			/**
			 * 这时hibernate是Persistent(坚持的,持久稳固的)状态,hibernate处于persistent时,
			 * 当对象属性发生改变时, hibernate在清理缓存时,会和数据库同步;
			 */
			session.save(student);

			// 提交事务
			ts.commit();
		} catch (Exception e) {
			e.printStackTrace();
			// 当发生错误时,回滚事务
			ts.rollback();
		} finally {
			// 最后关闭session
			HibernateUtils.closeSession(session);
		}
		// 当结束完一个session时,hibernate处于detached(分离的,分开的)状态
		student.setName("kejian");
		try {
			session = HibernateUtils.getSession();
			ts = session.beginTransaction();

			/**
			 * 这时hibernate是Persistent(坚持的,持久稳固的)状态,hibernate处于persistent时,
			 * 当对象属性发生改变时, hibernate在清理缓存时,会和数据库同步;
			 */
			session.update(student);
			session.getTransaction().commit();
		} catch (Exception e) {
			e.printStackTrace();
			session.getTransaction().rollback();
		} finally {
			HibernateUtils.closeSession(session);
		}
	}
}

 

 

你可能感兴趣的:(sql,Hibernate,JUnit)