博客
关于我
Hibernate对象的生命周期
阅读量:339 次
发布时间:2019-03-04

本文共 1540 字,大约阅读时间需要 5 分钟。

持久化对象的状态

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

2、 持久化对象(Persistent Object):持久实例是任何具有数据库标识的实例,它有持久化管理器Session统一管理,持久实例是在事务中进行操作的----它们的状态在事务结束时同数据库进行同步。当事务提交时,通过执行SQL的INSERT、UPDATE和DELETE语句把内存中的状态同步到数据库中。

3、 离线对象(Detached Object):Session关闭之后,持久化对象就变为离线对象。离线表示这个对象不能再与数据库保持同步,它们不再受hibernate管理。

package cn.siggy.test;import org.hibernate.Session;import org.hibernate.Transaction;import org.junit.Test;import cn.siggy.pojo.User;import cn.siggy.util.HibernateUtil;public class HibernateTest {	@Test	public void testSave(){		Session session=null;		Transaction tx=null;		User user=null;		try {			session = HibernateUtil.getSession();			tx = session.beginTransaction();			//构造对象--瞬时状态			user = new User();			user.setName("芒果");			user.setPwd("9999");			//持久状态,user被session管理,并且id有值--oid			session.save(user);			//在持久状态下;脏数据检查:当提交事务,清理缓存时发现session中数据			//和数据库中数据不一致时,将会把session中的数据更新到数据库中			user.setName("葡萄");			//在保存以后 再修改对象 那么将会产生2条sql语句,那么效率较低,建议在save前修改			session.flush();			tx.commit();		} catch (Exception e) {			e.printStackTrace();			tx.rollback();		}finally{			HibernateUtil.closeSession();		}		//user:游离状态		System.out.println("姓名:"+user.getName());		user.setName("橘子");		try {			session = HibernateUtil.getSession();			tx = session.beginTransaction();			//持久状态//			session.update(user);			session.saveOrUpdate(user);			tx.commit();		} catch (Exception e) {			e.printStackTrace();			tx.rollback();		}finally{			HibernateUtil.closeSession();		}	}		}

你可能感兴趣的文章
ASP.NET CORE MVC 实现减号分隔(Kebab case)样式的 URL
查看>>
SQL优化 MySQL版 -分析explain SQL执行计划与笛卡尔积
查看>>
python的map函数
查看>>
bcolz的新操作
查看>>
Linux的s、t、i、a权限(转)
查看>>
zmq的send
查看>>
C++中的delete加深认识
查看>>
windows消息机制(转)
查看>>
STL笔试面试题总结(干货)(转)
查看>>
XML 和 HTML 之间的差异
查看>>
qt中moc的作用
查看>>
阿里钉钉面试题
查看>>
华为社招笔试
查看>>
MFC的Dlg和App什么区别?应用程序类与对话框类
查看>>
C\C++下获取系统进程或线程ID(转)
查看>>
VS环境变量(转)
查看>>
C++中找资源或者函数的方法
查看>>
一些留给自己的思考题(只求回过头来能够有所获)
查看>>
SQL函数返回表的写法
查看>>
delete对象时会自动调用类的析构函数
查看>>