持久对象的生命周期介绍
来源:互联网 发布:c 并行编程 parallel 编辑:程序博客网 时间:2024/05/20 05:25
Transient对象:随时可能被垃圾回收器回收(在数据库中没有于之对应的记录,应为是new初始化),而执行save()方法后,
就变为Persistent对象(持久性对象),没有纳入session的管理
Persistent对象:在数据库有存在的对应的记录,纳入session管理。在清理缓存(脏数据检查)的时候,会和数据库同步。
Detached对象:也可能被垃圾回收器回收掉(数据库中存在对应的记录,只是没有任何对象引用它是指session引用),注
引状态经过Persistent状态,没有纳入session的管理
Junit简介:
编写测试类xxxTest,需要继承TestCase;
编写单元测试方法,测试方法必须以test开关,测试方法不能含有参数和返回值,如:
Public void testHello1(){}
最好单元测试的代码单独建立一个目录。
赃数据检查(版本比较):
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();tx.rollback();} finally {HibernateUtils.closeSession(session);}
session现在插入一条数据:User 对象name: 李四,现在需要修改数据,修改数据时采用数据版本的比较,修改之
前对现有数据记录照一个快照(这个快照为最新数据“name:李四”),现在要User对象的name更改为五王(name:
五王),当session提交事务之前时commit(),需要清理缓存(也称为賍数据对比),查看哪些数据需要发innert 的
SQL语句,而哪些需要发update语句。此处发出两条(第一条:为innert语句添加;第二条:在賍数据对比时发现
数据发生改变,就发出update语句
Hibernate: insert into User (name, password, createTime, expireTime, id) values (?, ?,
?, ?, ?)
Hibernate: update User set name=?, password=?, createTime=?, expireTime=? where id=?
public void testSave1(){Session session = null;Transaction tx = null;User user = null;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("王五");//实际上user.setName("王五")此时已经发出一条update指令了。//也可以显示的调用update指定//session.update(user);tx.commit();} catch (Exception e) {e.printStackTrace();tx.rollback();} finally {HibernateUtils.closeSession(session);}/* * 从此处开始session已经在上面关闭,这时user对象状态就变为detached状态, * 所有user对象已经不被session管理,但数据库中确实存在与至对应的记录(王五)。 *///detached状态user.setName("张三");try {session = HibernateUtils.getSession();session.beginTransaction();/* * 此时session又对user对象进行管理 * 当session发出update指定后,进行更新数据为(张三。) */session.update(user);//update后user对象状态又变为persistent状态session.getTransaction().commit();/* * 此时session提交事务,发出update语句 * Hibernate: update User set name=?, password=?, createTime=?, expireTime=? where id=? */} catch (HibernateException e) {// TODO Auto-generated catch blocke.printStackTrace();session.getTransaction().rollback();}finally {HibernateUtils.closeSession(session);}}
- 持久对象的生命周期介绍
- 持久对象的生命周期
- 持久化对象的生命周期
- Hibernate持久化对象的生命周期(lifecycle)
- Hibernate 持久化对象的生命周期
- 4. Hibernate持久对象的生命周期
- Hibernate持久化对象的生命周期详解
- Hibernate 持久化对象的生命周期
- hibernate中持久化对象的生命周期
- Hibernate持久化对象的生命周期
- 持久化对象的生命周期[hibernate]
- Hibernate持久化对象的生命周期详解
- Hibernate持久化对象的生命周期详解
- Hibernate_持久化对象的生命周期
- Hibernate持久化对象的生命周期
- Hibernate持久化对象的生命周期
- 持久对象的生命周期(瞬时态、持久态、脱管态)
- 持久化对象生命周期
- POJ 1458 Common Subsequence(求最长公共子序列)
- Android EditText setOnClickListener事件 只有获取焦点才能响应 采用setOnTouchListener解决
- Android游戏开发:游戏框架的搭建(3)
- Oracle12 安装:请确保当前用户具有访问临时文件的权限
- Apache Mina入门
- 持久对象的生命周期介绍
- android Content provider 组件
- Android游戏开发:游戏框架的搭建(4)
- hdu 1561 树形DP
- 借助C3P0连接池访问dept表
- MySQL两种常用的存储引擎(mysql调优)
- 小谈 MD5加密算法
- POJ 1226 Substrings(最长公共连续串的变形,可以倒转+KMP)
- nginx负载均衡器处理session共享的几种方法