以前以为hibernate是通过id来却分对象的状态的,分析源码才发现是通过状态标识的,hibernate会自动为你的对象添加一个状态标识,具体如下:
- protected static final int PERSISTENT = 0;
- protected static final int TRANSIENT = 1;
- protected static final int DETACHED = 2;
- protected static final int DELETED = 3;
-
- switch ( entityState ) {
- case DETACHED:
- entityIsDetached( event );
- return null;
- case PERSISTENT:
- return entityIsPersistent( event );
- default:
- return entityIsTransient( event );
- }
-
不管是save,update还是saveOrUpdate,hibernate都会调用DefaultSaveOrUpdateEventListener类的onSaveOrUpdate(......)方法,代码如下:
- SaveOrUpdateEventListener是个接口,实现类为DefaultSaveOrUpdateEventListener
- public void onSaveOrUpdate(SaveOrUpdateEvent event) {
- final SessionImplementor source = event.getSession();
- final Object object = event.getObject();
- final Serializable requestedId = event.getRequestedId();
-
- if ( requestedId != null ) {
-
-
- if ( object instanceof HibernateProxy ) {
- ( ( HibernateProxy ) object ).getHibernateLazyInitializer().setIdentifier( requestedId );
- }
- }
-
- if ( reassociateIfUninitializedProxy( object, source ) ) {
- log.trace( "reassociated uninitialized proxy" );
-
-
- }
- else {
-
- final Object entity = source.getPersistenceContext().unproxyAndReassociate( object );
- event.setEntity( entity );
- event.setEntry( source.getPersistenceContext().getEntry( entity ) );
-
- event.setResultId( performSaveOrUpdate( event ) );
- }
-
- }
以下代码中hibernate会从session中读取对象的快照,如果没有,对象的状态就是TRANSIENT
- DefaultSaveEventListener类,继承自DefaultSaveOrUpdateEventListener
- protected Serializable performSaveOrUpdate(SaveOrUpdateEvent event) {
-
-
- EntityEntry entry = event.getSession().getPersistenceContext().getEntry( event.getEntity() );
-
- if ( entry!=null && entry.getStatus() != Status.DELETED ) {
-
- return entityIsPersistent(event);
- }
- else {
- return entityIsTransient(event);
- }
- }
分享到:
相关推荐
hibernate中session对象的状态详解
在Java的持久化框架Hibernate中,对象的状态是理解其工作原理的关键部分。这些状态决定了对象与数据库之间的关联程度,以及Hibernate如何处理对象的生命周期。以下是Hibernate对象的三种主要状态及其特点: 1) 临时...
在Java的持久化框架Hibernate中,对象的状态管理是其核心特性之一。理解并掌握对象的三种状态对于开发高效、稳定的数据库应用至关重要。本篇将详细阐述Hibernate中的瞬时态、持久态和脱管态,以及它们之间的转换。 ...
在 Hibernate 中,对象的状态管理是至关重要的,因为它直接影响到对象如何与数据库交互。以下是 Hibernate 中对象的三种状态以及相关的保存方法: 1. **瞬时对象(Transient Objects)** - 当使用 `new` 关键字...
在Java的持久化框架Hibernate中,对象存在三种不同的状态,分别是持久态(Persistent)、自由态(Transient)和游离态(Detached)。这三种状态分别对应了对象与数据库的关联程度,理解它们对于高效地使用Hibernate...
本文将深入探讨Hibernate中的实体状态及其转换,帮助开发者更好地掌握如何有效地使用Hibernate进行数据操作。 首先,我们要了解Hibernate定义的三种实体状态: 1. **临时状态(Transient)**:当我们在程序中通过`...
在 Hibernate 框架中,Java 对象的状态管理和 Session 缓存是核心概念,它们直接影响着数据的持久化过程和数据库交互效率。本篇文章将详细阐述 Hibernate 中对象的三种状态——临时状态、持久化状态和游离状态,以及...
在 Hibernate 中,对象有三种不同的状态,这些状态决定了对象与数据库之间的关联程度以及如何进行数据操作。理解这些状态对于有效地使用 Hibernate 至关重要。 1. **瞬时态(Transient)**: - 瞬时态的对象是刚刚...
本篇将详细阐述Hibernate中的对象三状态、一对一(OneToOne)、一对多(OneToMany)以及多对多(ManyToMany)关系映射。 一、Hibernate对象三状态 1. 游离态(Detached):对象在应用程序中创建,但尚未与Session...
首先,我们来看一下Hibernate中持久化对象的三种基本状态: 1. **瞬时对象(Transient Objects)**: - 当使用`new`关键字创建一个新的Java对象时,该对象是瞬时的。这意味着它们与数据库没有任何关联。如果对象...
在Hibernate中,持久化对象是指具有与数据库表相对应状态的Java对象。一旦一个对象被持久化,它就处于Hibernate的管理之下,其生命周期将与数据库记录绑定。Hibernate提供了四种对象状态:瞬时态、持久态、脱管态和...
在Hibernate中,对象的状态分为瞬时状态、持久状态和脱管状态。瞬时状态的对象存在于内存中,但未与SessionFactory关联;持久状态的对象已经被持久化到数据库,并且可以通过SessionFactory追踪;脱管状态的对象曾经...
本人在厦门邦初培训时候 使用的快速入门精简文档 ...对象的临时状态、持久状态和游离状态 用session的update()方法使游离对象转变为持久化对象。 延迟装载 迫切左外链接 HQL检索方式 QBC检索方式 本地SQL检索方式
Hibernate对象的生命周期 Hibernate对象的生命周期 Hibernate对象的生命周期
在Java的持久化框架Hibernate中,对象的状态管理是其核心功能之一。Hibernate将对象的状态划分为四种:临时状态、持久化状态、游离状态和删除状态。这些状态反映了对象与数据库记录之间的关系,有助于理解Hibernate...
在Java开发中,持久化是将应用程序中的对象状态保存到持久存储介质(如数据库)的过程。Hibernate通过提供一种对象-关系映射机制,使得Java对象可以直接与数据库表进行交互,而无需编写大量的SQL语句。这种映射机制...
《精通Hibernate:Java对象持久化技术详解》一书聚焦于Java开发中的对象持久化技术,主要围绕Hibernate这一流行ORM框架进行深入探讨。Hibernate是Java世界里的重要工具,它简化了数据库操作,使得开发者可以更加专注...
以下是关于Hibernate中对象的三种状态以及保存方法的详细分析: 1. **对象的三种状态** - **瞬态(Transient)**:对象刚被创建,尚未与任何Session关联,不具备持久化能力。对瞬态对象的修改不会自动同步到数据库...
在Hibernate中,核心概念包括实体(Entities)、持久化类(Persistent Classes)、会话(Sessions)、事务(Transactions)和查询(Queries)。实体是应用程序中的业务对象,它们对应数据库中的表;持久化类是包含@...
《Java精通Hibernate对象持久化技术权威指南》是一本深度探讨Java开发中如何高效地使用Hibernate进行对象持久化的专业书籍。本书旨在帮助Java开发者熟练掌握Hibernate框架,实现数据库操作的简化和自动化,提升软件...