`
wjt276
  • 浏览: 640126 次
  • 性别: Icon_minigender_1
  • 来自: 合肥
社区版块
存档分类
最新评论

004---持久对象的生命周期介绍(一)

阅读更多

久化对象的状态:

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

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

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

 

 

 

 

Transient对象:随时可能被垃圾回收器回收(在数据库中没有于之对应的记录,应为是new初始化),而执行save()方法后,就变为Persistent对象(持久性对象),没有纳入session的管理

Persistent对象:在数据库有存在的对应的记录,纳入session管理。在清理缓存(脏数据检查)的时候,会和数据库同步。

Detached对象:也可能被垃圾回收器回收掉(数据库中存在对应的记录,只是没有任何对象引用它是指session引用),注引状态经过Persistent状态,没有纳入session的管理

 

 

Junit简介:

编写测试类xxxTest,需要继承TestCase

编写单元测试方法,测试方法必须以test开关,测试方法不能含有参数和返回值,如:

         Public void testHello1(){}

最好单元测试的代码单独建立一个目录。

 

------2009/10/17--------------

赃数据检查(版本比较)

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(),需要清理缓存(也称为賍数据对比),查看哪些数据需要发innertSQL语句,而哪些需要发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("张三");

       

 

  • 大小: 11.6 KB
  • 大小: 2.3 KB
分享到:
评论

相关推荐

    Hibernate对象的生命周期

    Hibernate对象的生命周期 Hibernate对象的生命周期 Hibernate对象的生命周期

    Hibernate持久化对象的生命周期

    Hibernate持久化对象的生命周期 持久化对象的状态: 瞬时对象(Transient Objects)持久化对象(Persist Objects)、离线对象(Detached Objects)、 Java对象在JVM中的生命周期 理解Session的缓存 在Hibernate应用...

    hibernate持久化对象生命周期[参照].pdf

    hibernate持久化对象生命周期[参照].pdf

    T21.4_持久化对象生命周期 java 经典教程 经典教材

    T21.4_持久化对象生命周期 java 经典教程 经典教材

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

     23.1.1 Session对象的生命周期与本地线程绑定  23.1.2 Session对象的生命周期与JTA事务绑定  23.2 实现对话  23.2.1 使用游离对象  23.2.2 使用手工清理缓存模式下的Session  23.3 小结  23.4 思考题 第24章...

    精通Hibernate:对象持久化技术第二版part3

    本章站在持久化层的角度,Java对象在生命周期中可处于临时状态、持久化状态、删除状态和游离状态。处于持久化状态的Java对象位于一个Session实例的缓存中,Session能根据这个对象的属性变化来同步更新数据库。 8.1 ...

    精通hibernate:对象持久化技术孙卫琴第二版part2

    本章站在持久化层的角度,Java对象在生命周期中可处于临时状态、持久化状态、删除状态和游离状态。处于持久化状态的Java对象位于一个Session实例的缓存中,Session能根据这个对象的属性变化来同步更新数据库。 8.1 ...

    一套不错的hibernate学习教程

    一套不错的hibernate教程,发现这里没有. 我是从百度上文库里搞来的,花了我30多分. 现在整合一起.只要5分啦.. 内容简介 --------------------------------- ...Hibernate对象的生命周期 ..............

    精通 Hibernate:Java 对象持久化技术详解(第2版).part4

     23.1.1 Session对象的生命周期与本地线程绑定  23.1.2 Session对象的生命周期与JTA事务绑定  23.2 实现对话  23.2.1 使用游离对象  23.2.2 使用手工清理缓存模式下的Session  23.3 小结  23.4 思考题 第24章...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part3

     23.1.1 Session对象的生命周期与本地线程绑定  23.1.2 Session对象的生命周期与JTA事务绑定  23.2 实现对话  23.2.1 使用游离对象  23.2.2 使用手工清理缓存模式下的Session  23.3 小结  23.4 思考题 第24章...

    play框架手册

    请求生命周期 - 8 - 标准应用程序布局layout - 9 - app目录 - 9 - public目录 - 10 - conf目录 - 10 - lib目录 - 11 - 开发生命周期 - 11 - 连接到java调试器 - 12 - 类增强Enhancement - 13 - 02.HTTP路由 - 13 - ...

    play framework 框架手册 word 版

    请求生命周期 - 8 - 标准应用程序布局layout - 9 - app目录 - 9 - public目录 - 10 - conf目录 - 10 - lib目录 - 11 - 开发生命周期 - 11 - 连接到java调试器 - 12 - 类增强Enhancement - 13 - 02.HTTP路由 - 13 - ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part1.rar

     23.1.1 Session对象的生命周期与本地线程绑定  23.1.2 Session对象的生命周期与JTA事务绑定  23.2 实现对话  23.2.1 使用游离对象  23.2.2 使用手工清理缓存模式下的Session  23.3 小结  23.4 思考题 第24章...

    Hibernate_3.2.0_符合Java习惯的关系数据库持久化

    21.3. 级联生命周期(Cascading lifecycle) 21.4. 级联与未保存值(Cascades and unsaved-value) 21.5. 结论 22. 示例:Weblog 应用程序 22.1. 持久化类 22.2. Hibernate 映射 22.3. Hibernate 代码 23. ...

    Hibernate学习笔记

    004 持久对象的生命周期介绍 005 query 接口初步 006 开源 O/R 映射框架内容回顾 007 Hibernate 基本映射标签和属性介绍 008 多对一 关联映射 009 一对一 主键关联映射_单向 010 一对一 主键关联映射_双向 011 一对...

    对象-关系映射—Hibernate 培训 (中文)

    对象-关系映射—Hibernate 培训 (中文) 目录 一、持久化层-O/R Mapping 二、Hibernate入门 三、Hibernate映射申明(Mapping declaration...四、持久化对象的状态和生命周期 五、Hibernate查询 六、Hibernate最佳实践

    Hibernate 面试题

    好用的Hibernate面试题资料,帮助你应聘J2EE的相关岗位

    asp.net session对象的持久化

    众所周知,Session对象的生命周期关闭浏览器之后就会销毁,那该如何持久化的保存Session对象的数据呢?(ps:将session对象的值保存到数据库当中就可以了)使用SQL Server数据库保存Session session对象案例 记住...

    SQL Server 2008商业智能完美解决方案 3/3

    管理开发生命周期,打造BI团队; 深入研究SQL Servet Analysis Services、Integration Services和 Reporting Services; 使用Business Intelligence Development Studio(BIDS); 编写对销售数据进行分级、排序和深化...

Global site tag (gtag.js) - Google Analytics