`
foreverke01
  • 浏览: 37552 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

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);
		}
	}
}

 

 

0
0
分享到:
评论

相关推荐

    struts1.2 + spring2.5 + hibernate3.2框架demo

    在Struts1.2和Hibernate3.2集成中,Spring可以作为它们之间的粘合剂,比如管理Action的生命周期,提供数据访问的事务控制。 再来看Hibernate3.2,它是Java世界中广泛使用的ORM解决方案。通过将Java对象映射到数据库...

    Hibernate3.2整套源码

    SessionFactory是线程安全的,通常在整个应用生命周期中只创建一个。 - **Session**:它是与数据库交互的前线接口,用于执行CRUD操作(创建、读取、更新和删除)。 - **Query和Criteria API**:这两者提供了执行...

    hibernate3.2

    9. **实体状态管理**:Hibernate 3.2 理解对象的生命周期,包括瞬时态(Transient)、持久态(Persistent)、游离态(Detached)和删除态(Removed),这有助于正确管理对象的状态并优化数据库操作。 10. **集合...

    开发框架 hibernate3.2

    - 可以通过实现Hibernate的事件接口,注册监听器,对对象的生命周期事件(如保存、更新、删除等)进行自定义处理。 综上所述,Hibernate 3.2是一个强大而灵活的ORM框架,它极大地简化了Java开发中的数据持久化工作...

    hibernate3.2 jar包

    SessionFactory是线程安全的,一般在应用启动时创建一次,然后在整个应用生命周期中重复使用。 3. **Session**:Session是与数据库交互的主要接口,它提供了保存、更新、删除对象以及执行HQL(Hibernate查询语言)...

    struts2+spring2.5+hibernate3.2整合完整项目,带数据库脚本

    Spring2.5则是一个全面的后端解决方案,它包含了依赖注入(DI)和面向切面编程(AOP)的核心特性,可以用来管理对象的生命周期和装配。此外,Spring的DAO支持和事务管理简化了数据访问层的实现。Spring与Hibernate的...

    hibernate_3.2官方开发包

    10. **Callback事件**:Hibernate允许在对象生命周期中的特定时刻(如加载、保存、更新和删除)注册回调方法,实现业务逻辑。 11. **Association Mapping关联映射**:Hibernate支持一对一、一对多、多对一、多对多...

    hibernate3.2用到的jar包

    它是线程安全的,通常在应用启动时创建,然后在整个应用生命周期内复用。 4. **Session**:Session 是与数据库交互的主要接口,提供了事务管理和数据持久化的功能。它支持CRUD(创建、读取、更新、删除)操作,并...

    hibernate3.2 源码

    8. **事件监听器**:Hibernate 3.2允许开发者注册事件监听器,对对象的生命周期事件(如加载、保存、更新、删除)进行拦截和处理。 9. **集合映射**:在实体类中,可以定义一对多、一对一、多对一、多对多的关系。...

    hibernate-3.2源代码

    五、对象状态与生命周期 在Hibernate中,对象有三种状态:瞬时态、持久态和脱管态。理解这些状态对于正确操作对象至关重要,例如,只有持久态对象才能参与事务。 六、缓存机制 Hibernate 3.2引入了二级缓存,通过...

    struts2+spring2.5+hibernate3.2

    在SSH集成中,Spring主要负责服务层的管理,包括bean的生命周期管理、事务控制以及与Hibernate的整合。 Hibernate3.2是一个对象关系映射(Object-Relational Mapping,ORM)框架,它简化了数据库操作,将Java对象与...

    hibernate3.2参考文档

    讲解其生命周期、事务管理和并发控制。 5. **Query与Criteria API**:介绍HQL(Hibernate Query Language),一种面向对象的查询语言,以及Criteria API,用于动态构建查询。包括基本查询、条件查询、分页查询、...

    hibernate3.2课件共31页.pdf.zip

    【hibernate3.2课件共31页.pdf.zip】这个压缩文件包含了关于Hibernate 3.2的详细教学资料,共计31页。Hibernate是一个非常重要的Java持久化框架,它简化了数据库操作,使开发者能够更加专注于业务逻辑而不是数据库...

    hibernate3.2源码

    8. **事件监听和拦截器**:Hibernate允许开发者通过实现特定接口或使用注解定义监听器,可以在对象生命周期的不同阶段执行自定义逻辑,如对象加载、保存、更新和删除时。 9. **关联映射**:包括一对一(@OneToOne)...

    hibernate3.2API

    6. **事件监听**:Hibernate允许注册监听器来响应特定的生命周期事件,如`PreInsertEventListener`、`PostUpdateEventListener`等。 7. **类型转换**:`UserType`和`CompositeUserType`接口允许自定义Java类型与...

    struts2.1 + spring 2.5 + hibernate 3.2 增删改查

    在本例中,Spring将作为服务层的容器,管理对象的生命周期和依赖关系。通过Spring的AOP,我们可以方便地实现事务管理,确保数据操作的一致性。 Hibernate 3.2 是一款流行的Java持久化框架,它简化了与数据库的交互...

    hibernate3.2 教程和API

    4. Session的生命周期和操作。 5. 数据库操作(增删改查)的示例。 6. 查询语言HQL和Criteria API的使用。 7. 高级话题,如级联操作、缓存、事务处理和实体监听器等。 这样的教程对初学者尤其有用,能够帮助他们...

    Hibernate3.2.zip

    8. **Event Listeners**:Hibernate3.2引入了事件监听器机制,开发者可以通过实现特定接口,注册监听器来拦截和自定义对象的生命周期事件,如保存、更新、删除等。 9. **Performance Enhancements**:此版本针对...

    struts1和2,spring2.5,hibernate3.2 jar包下载

    它通过SessionFactory和Session接口来管理数据库连接和事务,支持实体生命周期的管理,如持久化、加载、更新和删除。 在实际项目中,Struts2和Spring常结合使用,形成MVC架构,Struts2负责请求分发和视图呈现,...

Global site tag (gtag.js) - Google Analytics