hibernate的准备及配置工作参见我的另一篇文章(该文章中介绍hibernate的搭建及简单配置) : http://ysj5125094.iteye.com/blog/1893871
下面的实现类是用JUnit测试的,如果想了解JUnit内容请参见我的另一篇文章: http://ysj5125094.iteye.com/blog/1897295
持久化对象的状态:
1.瞬时对象(Transient Objects):使用new 操作符初始化的对象不是立刻就持久的。它们的状态是瞬时的,也就是说它们没有任何跟数据表相关联的行为,只要应用不再引用这些对象(不再被任何其它对象所引用),它们的状态将会丢失,并由垃圾回收机制回收。
2.持久化对象(Persist Objects):持久实例是任何具有数据库标识的实例。它有持久化管理器Session统一管理,持久实例是在事务中进行操作的。它们的状态在事务结束时同数据库进行同步。当事务提交时,通过执行SQL的insert、update和delete语句把内存中的状态同步到数据库中。
3.离线对象(Detached Objects):Session关闭之后,持久化对象就变为离线对象。离线表示这个对象不能再与数据库保持同步,它们不再受Hibernate管理。
下面通过一个小例子来具体说明持久化对象的生命周期:
为了方便,先创建一个管理Session的工具类HibernateUtils.java,代码如下:
package com.ysj.utils; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; public class HibernateUtils { /** * 创建静态块,用于初始化SessionFactory */ private static SessionFactory factory ; static{ try{ // 默认获取src根目录下的 hibernate.cfg.xml配置文件 Configuration cfg = new Configuration().configure(); // 通过配置文件获取 sessionFactory factory = cfg.buildSessionFactory() ; }catch(Exception e){ e.printStackTrace() ; } } /** * 获得SessionFactory */ public static SessionFactory getSessionFactory(){ return factory ; } /** * 获得Session */ public static Session getSession(){ if(factory != null){ return factory.openSession() ; }else{ return null ; } } /** * 关闭Session */ public static void closeSession(Session session){ if(session != null){ if(session.isOpen()){ session.close() ; session = null ; } } } }
测试类SessionTest.java,代码如下:
package com.ysj; import java.util.Date; import junit.framework.TestCase; import org.hibernate.Session; import org.hibernate.Transaction; import com.ysj.utils.HibernateUtils; public class SessionTest extends TestCase { /** * 持久化对象生命周期的过程演示 */ public void testSave(){ Session session = null ; Transaction tran = null ; User user = null ; try{ session = HibernateUtils.getSession() ; tran = session.beginTransaction() ; /** * Transient(瞬态) : * 1、在数据库中没有与之匹配的数据; * 2、没有纳入session的管理; * 3、如果在瞬态session 调用了 save()等方法就变为了持久态; */ user = new User() ; user.setName("小一") ; user.setPassword("xiaoyi") ; user.setCreateTime(new Date()) ; user.setExpireTime(new Date()) ; /** * Persistent(持久态) : * 1、persistent状态的对象在数据库中有与之匹配的数据; * 2、纳入了session的管理; * 3、在清理缓存(脏数据检查)的时候,会和数据库同步; * 4、在session关闭后,在持久态里面的内容,变为托管态,数据如果修改不会影响数据库对应值; */ session.save(user); user.setName("小二"); /* * 注意 : * 在执行完tran.commit()方法后,会在控制台输出两条SQL语句,分别是 * Hibernate: insert into t_user (name, password, createTime, expireTime, id) values (?, ?, ?, ?, ?) * Hibernate: update t_user set name=?, password=?, createTime=?, expireTime=? where id=? * * session.save(user); // 执行到save()方法时插入数据库一条记录。 * user.setName("小二"); // 当对持久态对象进行修改时,会执行update操作。相当于在该条词句下面显示执行session.update(user);操作。 */ tran.commit() ; }catch(Exception e){ if(tran != null){ tran.rollback() ; } e.printStackTrace() ; }finally{ HibernateUtils.closeSession(session); } /** * Detached(托管态) : * 1、在数据库中有与之匹配的数据; * 2、没有纳入session的管理; * 3、托管态对象中有主键值,瞬态的id没有主键值 */ user.setName("小三") ; try{ session = HibernateUtils.getSession() ; session.beginTransaction() ; /* * 将detached对象重新纳入session管理,此时将变为persistent状态的对象。 * persistent状态的对象,在清理缓存时会和数据库同步。 */ session.update(user); session.getTransaction().commit() ; }catch(Exception e){ session.getTransaction().rollback(); e.printStackTrace(); }finally{ HibernateUtils.closeSession(session); } } }
附件中存放的是用MyEclipse6.0的File System导出的练习工程,有需要的可以直接下载解压导入进行测试.
附件内容包括:save,get,load,query,JUnit的练习和生命周期的介绍。下载后先读readme.txt。
相关推荐
首先,我们来看一下Hibernate中持久化对象的三种基本状态: 1. **瞬时对象(Transient Objects)**: - 当使用`new`关键字创建一个新的Java对象时,该对象是瞬时的。这意味着它们与数据库没有任何关联。如果对象...
Hibernate提供了四种对象状态:瞬时态、持久态、脱管态和临时态,理解这些状态对于有效操纵持久化对象至关重要。 **三、配置Hibernate** 在开始操纵持久化对象之前,需要先配置Hibernate。这包括编写Hibernate配置...
Hibernate 操作持久化对象是Java开发中用于简化数据库交互的重要工具。它是一个开源的Java持久化框架,由Gavin King创建,并逐渐发展成为Java世界中主流的持久化解决方案。Hibernate的核心在于提供对象-关系映射(ORM...
本文将深入探讨Hibernate中的持久化对象生命周期,包括瞬时对象、持久化对象和游离对象的状态转换及其特性。 1. 瞬时对象(Transient Objects) 瞬时对象是指通过`new`操作符创建但尚未与数据库记录关联的Java对象...
4. **HQL(Hibernate Query Language)**:面向对象的查询语言,类似于SQL,但更接近Java的语法,用于检索和操作持久化对象。 5. **第二级缓存**:Hibernate支持查询结果的缓存,可以显著提高系统性能,特别是对于...
在Java开发中,持久化是将应用程序中的对象状态保存到持久存储介质(如数据库)的过程。Hibernate通过提供一种对象-关系映射机制,使得Java对象可以直接与数据库表进行交互,而无需编写大量的SQL语句。这种映射机制...
在Java的持久化框架Hibernate中,对象的状态管理是其核心特性之一。理解并掌握对象的三种状态对于开发高效、稳定的数据库应用至关重要。本篇将详细阐述Hibernate中的瞬时态、持久态和脱管态,以及它们之间的转换。 ...
在Java的持久化框架Hibernate中,对象存在三种不同的状态,分别是持久态(Persistent)、自由态(Transient)和游离态(Detached)。这三种状态分别对应了对象与数据库的关联程度,理解它们对于高效地使用Hibernate...
本篇文章将详细阐述 Hibernate 中对象的三种状态——临时状态、持久化状态和游离状态,以及 Session 缓存的工作原理。 1. Session 缓存及作用 Session 是 Hibernate 提供的一个接口,它充当了应用程序与数据库之间...
了解Hibernate对象的这三种状态,对于编写高效、稳定的持久化代码至关重要。正确管理对象状态可以帮助优化数据库交互,减少不必要的查询,提高系统的整体性能。在实际开发中,开发者需要根据业务需求和性能考虑,...
3. **游离状态**:当Session关闭或事务结束后,持久化对象会变成游离状态。尽管这些对象不再受Session管理,但它们仍保留着之前从数据库加载的数据,除非显式地进行更新操作,否则不会触发与数据库的交互。 #### 二...
### 精通Hibernate持久化对象技术 #### Hibernate概述 Hibernate是一种开源的对象关系映射(Object Relational Mapping,ORM)框架,它为Java应用程序提供了一种简单、灵活的方式来与数据库进行交互。通过...
在JDO中,首先需要编写POJO,然后通过一个名为Enhancer的工具在编译后阶段对POJO的字节码进行增强,生成对应的持久化对象。这意味着JDO的转换过程发生在编译期间,而Hibernate的转换是在运行时。 Hibernate的优点...
【精通Hibernate:Java对象持久化技术】主要涵盖了Java应用程序的分层体系结构、软件模型以及对象持久化的概念,特别是如何使用Hibernate这一ORM框架进行持久化操作。以下是详细的知识点解析: 1. **应用程序分层...
《精通Hibernate:Java持久化对象技术详解[第二版]》是一部深入探讨Hibernate框架的专业书籍,旨在帮助Java开发者熟练掌握和运用这一强大的ORM(Object-Relational Mapping)工具。Hibernate是Java开发领域中广泛...
了解实体类、持久化属性、主键、对象状态等基本术语。 2. **配置与环境搭建**:学习如何配置Hibernate,包括hibernate.cfg.xml文件的编写,以及JDBC连接池的设置。 3. **对象关系映射(ORM)**:研究Hibernate的...
- **数据持久化**: 指的是程序中的对象状态在系统重启后仍然能够保存,即使没有内存支持也能保持其状态。在Hibernate中,数据持久化是通过对象和数据库记录之间的映射实现的。 2. **Hibernate 配置** - **...
对象持久化是将应用程序中的对象状态存储到持久化介质(如数据库)的过程,使得即使程序关闭,对象的状态也能被保留下来。在Hibernate中,对象的生命周期包括瞬时态、托管态、持久态和脱管态。通过Hibernate,我们...
#### 改变持久化对象状态的方法 - **将瞬态对象转换为持久化状态**:主要通过`save()`或`persist()`方法实现。这两个方法的主要区别在于,`save()`方法返回对象的标识符,而`persist()`方法则不返回任何值。 - **...
8.3 Java对象在Hibernate持久化层的状态 8.3.1 临时对象的特征 8.3.2 持久化对象的特征 8.3.3 被删除对象的特征 8.3.4 游离对象的特征 8.4 Session接口的详细用法 8.4.1 Session的save()和persist()...