`

Hibernate中Session的操作解释

阅读更多

Hibernate的透明持久化用起来非常舒服,有时甚至忘记了数据库的存在。我身边的朋友经常会分不清save、saveOrUpdate、update的区别,lock、merge、replicate、refresh、evict甚至不知道是干什么用的。而且关于实体对象的生命周期也有很多概念不清,分不清transient、persistent、detached的区别,只是知道PO、VO这样的通俗叫法。其实这些概念都很简单,Hibernate的javadoc写的都很清楚,只需看看就能明白。所以我花了些时间将Hibernate 3.1.2中session的javadoc部分翻译了一下,旨在让那些因为Hibernate的“透明”而忘记了它基本概念的人们停下来再看看这些概念

 

Method Summary
 Transaction beginTransaction()
          开始一个工作单元并且返回相关联的事务(Transaction)对象。
 void cancelQuery()
          终止执行当前查询。
 void clear()
          完整的清除这个session。
 Connection close()
          停止这个Session,通过中断JDBC连接并且清空(cleaning up)它。
 Connection connection()
          获取这个Session的JDBC连接。

如果这个session使用了积极的collection释放策略(如CMT-容器控制事务的环境下),关闭这个调用的连接的职责应该由当前应用程序负责。
 boolean contains(Object object)
          检查这个对象实例是否与当前的Session关联(即是否为Persistent状态)。
 Criteria createCriteria(Class persistentClass)
          为给定的实体类或它的超类创建一个新的Criteria实例。
 Criteria createCriteria(Class persistentClass, String alias)
          根据给定的实体类或者它的超类创建一个新的Criteria实例,并赋予它(实体类)一个别名。
 Criteria createCriteria(String entityName)
          根据给定的实体的名称(name),创建一个新的Criteria实例。
 Criteria createCriteria(String entityName, String alias)
          根据给定的实体的名称(name),创建一个新的Criteria实例,并赋予它(实体类)一个别名
 Query createFilter(Object collection, String queryString)
          根据给定的collection和过滤字符串(查询条件)创建一个新的Query实例。
 Query createQuery(String queryString)
          根据给定的HQL查询条件创建一个新的Query实例。
 SQLQuery createSQLQuery(String queryString)
          根据给定的SQL查询条件创建一个新的SQLQuery实例。
 void delete(Object object)
          从数据库中移除持久化(persistent)对象的实例。
 void delete(String entityName, Object object)
          从数据库中移除持久化(persistent)对象的实例。
 void disableFilter(String filterName)
          禁用当前session的名称过滤器。
 Connection disconnect()
          断开Session与当前的JDBC连接。
 Filter enableFilter(String filterName)
          打开当前session的名称过滤器。
 void evict(Object object)
          将当前对象实例从session缓存中清除。
 void flush()
          强制提交刷新(flush)Session
 Object get(Class clazz, Serializable id)
          根据给定标识和实体类返回持久化对象的实例,如果没有符合条件的持久化对象实例则返回null。
 Object get(Class clazz, Serializable id, LockMode lockMode)
          根据给定标识和实体类返回持久化对象的实例,如果没有符合条件的持久化对象实例则返回null。
 Object get(String entityName, Serializable id)
          返回与给定的实体命名和标识匹配的持久化实例,如果没有对应的持久化实例则返回null。
 Object get(String entityName, Serializable id, LockMode lockMode)
          返回与给定的实体类和标识所匹配的持久化实例,如果没有对应的持久化实例则返回null。
 CacheMode getCacheMode()
          得到当前的缓存模式。
 LockMode getCurrentLockMode(Object object)
          检测给定对象当前的锁定级别。
 Filter getEnabledFilter(String filterName)
          根据名称获取一个当前允许的过滤器(filter)。
 EntityMode getEntityMode()
          获取这个session有效的实体模式。
 String getEntityName(Object object)
          返回一个持久化对象的实体名称。
 FlushMode getFlushMode()
          获得当前的刷新提交(flush)模式。
 Serializable getIdentifier(Object object)
          获取给定的实体对象实例在Session的缓存中的标识,如果该实例是自由状态(Transient)的或者与其它Session关联则抛出一个异常。
 Query getNamedQuery(String queryName)
          从映射文件中根据给定的查询的名称字符串获取一个Query(查询)实例。
 Session getSession(EntityMode entityMode)
          根据给定的实体模式(Entity Mode)开始一个新的有效的Session。
 SessionFactory getSessionFactory()
          获取创建这个session的SessionFactory实例。
 SessionStatistics getStatistics()
          获取这个session的统计信息。
 Transaction getTransaction()
          获取与这个session关联的Transaction(事务)实例。 instance associated with this session.
 boolean isConnected()
          检查当前Session是否处于连接状态。
 boolean isDirty()
          当前Session是否包含需要与数据库同步的(数据状态)变化 ?如果我们刷新提交(flush)这个session是否会有SQL执行?
 boolean isOpen()
          检查当前Session是否仍然打开。
 Object load(Class theClass, Serializable id)
          在符合条件的实例存在的情况下,根据给定的实体类和标识返回持久化状态的实例。
 Object load(Class theClass, Serializable id, LockMode lockMode)
          在符合条件的实例存在的情况下,根据给定的实体类、标识及指定的锁定等级返回持久化状态的实例。
 void load(Object object, Serializable id)
          将与给定的标示对应的持久化状态(值)复制到给定的自由状态(trasient)实例上。
 Object load(String entityName, Serializable id)
          在符合条件的实例存在的情况下,根据给定的实体类和标识返回持久化状态的实例。
 Object load(String entityName, Serializable id, LockMode lockMode)
          在符合条件的实例存在的情况下,根据给定的实体类、标识及指定的锁定等级返回持久化状态的实例。
 void lock(Object object, LockMode lockMode)
          从给定的对象上获取指定的锁定级别。
 void lock(String entityName, Object object, LockMode lockMode)
          从给定的对象上获取指定的锁定级别。
 Object merge(Object object)
          将给定的对象的状态复制到具有相同标识的持久化对象上。
 Object merge(String entityName, Object object)
          将给定的对象的状态复制到具有相同标识的持久化对象上。
 void persist(Object object)
          将一个自由状态(transient)的实例持久化。
 void persist(String entityName, Object object)
          将一个自由状态(transient)的实例持久化。
 void reconnect()
          不推荐的。 手工的重新连接只应用于应用程序提供连接的情况,在这种情况下或许应该使用reconnect(java.sql.Connection)
 void reconnect(Connection connection)
          重新连接到给定的JDBC连接。
 void refresh(Object object)
          从数据库中重新读取给定实例的状态。
 void refresh(Object object, LockMode lockMode)
          根据指定的锁定模式(LockMode),从数据库中重新读取给定实例的状态。
 void replicate(Object object, ReplicationMode replicationMode)
          使用当前的标识值持久化给定的游离状态(Transient)的实体。
 void replicate(String entityName, Object object, ReplicationMode replicationMode)
          使用当前的标识值持久化给定的游离状态(Transient)的实体。
 Serializable save(Object object)
          首先为给定的自由状态(Transient)的对象(根据配置)生成一个标识并赋值,然后将其持久化。
 Serializable save(String entityName, Object object)
          首先为给定的自由状态(Transient)的对象(根据配置)生成一个标识并赋值,然后将其持久化。
 void saveOrUpdate(Object object)
          根据给定的实例的标识属性的值(注:可以指定unsaved-value。一般默认null。)来决定执行 save()update()操作。
 void saveOrUpdate(String entityName, Object object)
          根据给定的实例的标识属性的值(注:可以指定unsaved-value。一般默认null。)来决定执行 save()update()操作。
 void setCacheMode(CacheMode cacheMode)
          设置刷新提交模式。
 void setFlushMode(FlushMode flushMode)
          设置刷新提交模式。
 void setReadOnly(Object entity, boolean readOnly)
          将一个未经更改的持久化对象设置为只读模式,或者将一个只读对象标记为可以修改的模式。
 void update(Object object)
          根据给定的detached(游离状态)对象实例的标识更新对应的持久化实例。
 void update(String entityName, Object object)
          根据给定的detached(游离状态)对象实例的标识更新对应的持久化实例。

 

分享到:
评论
2 楼 allengorr 2010-10-12  
好人,真的,对于我们这样的初学者,太好了,谢谢!
1 楼 dapeng 2007-09-05  

相关推荐

    hibernate中session的管理

    在Hibernate框架中,Session是与数据库交互的主要接口,它负责对象的持久化操作。然而,由于Session不是线程安全的,所以在多线程环境中管理Session就需要特别注意。本篇文章将详细探讨Hibernate中Session的管理,...

    Hibernate-nosession

    Session是Hibernate中的核心接口,它充当了应用程序和数据库之间的桥梁,负责对象的持久化操作,如保存、更新、删除和查询等。Session通常在一个事务中打开并在事务结束时关闭,以确保数据的一致性和完整性。 然而...

    重写hibernate的session简单增删改查

    在应用中,用自定义SessionFactory创建的Session替换原生的Session,这样就可以在增删改查操作中使用自定义功能。 三、文件列表分析 "重写Session增删改查"这个压缩包可能包含了以下内容: - 源码示例:展示如何...

    Hibernate(session管理)

    在Java的持久化框架中,Hibernate是一个非常重要的组件,它为开发者提供了强大的对象关系映射(ORM)功能,使得在Java应用中操作数据库变得更加简单。本文将深入探讨Hibernate中的核心概念——Session管理。 首先,...

    hibernate和session学习

    Hibernate 是一个强大的Java对象关系映射(ORM)框架,它为开发者提供了在Java应用程序中操作数据库的强大工具。通过Hibernate,我们可以将数据库中的表与Java类进行映射,从而实现对数据库的操作,而无需编写大量的...

    Hibernate_Session_Transaction

    与Web开发中的`HttpSession`不同,`Hibernate Session`与JDBC的`Connection`更为相似,负责处理数据的持久化操作。`Session`具有短暂的生命周期,通常在一次数据库事务的开始和结束之间创建和关闭。 `Session`具有...

    Hibernate的Session的javadoc

    Hibernate的Session接口是Java应用程序与Hibernate之间主要的运行时交互接口,它提供了对持久化对象的创建、读取和删除操作。Session的概念是基于对象的状态管理和数据库事务的,它的生命周期通常与一个物理事务绑定...

    org.hibernate.HibernateException: No Hibernate Session bound to thread

    这样,在查询操作中,Hibernate Session 将被正确地绑定到当前线程。 而在插入、修改和删除操作中,我们需要添加不同的注解: @Transactional(readOnly=false, propagation=Propagation.REQUIRED) public void ...

    hibernate session生命周期示例

    在Java的持久化框架中,Hibernate是一个非常重要的存在,它为开发者提供了强大的对象关系映射(ORM)功能,简化了数据库操作。本示例将深入探讨Hibernate Session的生命周期及其使用,帮助你更好地理解和运用这个...

    hibernate的session.flush

    3. **对象状态转换**:在`flush()`操作中,Hibernate可能将瞬态对象转换为持久化对象,或将持久化对象的状态更新到数据库。 4. **批量操作优化**:为了提高效率,`flush()`可能会合并多个小的更新或插入操作,形成...

    hibernate--3.Hibernate数据持久化(通过 Session 操纵对象)

    当我们在Session上进行操作时,这些操作不会立即反映到数据库中,而是被缓存起来,直到调用`flush()`方法或者事务提交时才会真正执行。 在开始使用Session之前,需要配置Hibernate的环境,包括创建SessionFactory,...

    Hibernate Session释放模式

    在Java的持久化框架Hibernate中,Session对象是与数据库交互的核心组件,它负责管理对象的持久状态。在处理大量数据或者长时间运行的事务时,合理地管理Session的生命周期至关重要,这就涉及到了Hibernate的Session...

    Hibernate_session_factory_配置.docx

    在Java的持久层框架Hibernate中,SessionFactory是核心组件之一,它是线程安全的,负责创建Session对象,每个Session对应于数据库的一次会话。配置SessionFactory主要是通过Hibernate的配置文件(通常为hibernate....

    实现自己的Hibernate框架之Session 方法实现

    在IT行业中,数据库操作是应用程序开发中的重要环节,而Hibernate作为一个强大的对象关系映射(ORM)框架,极大地简化了Java应用程序对数据库的操作。本篇文章将深入探讨如何实现自己的Hibernate框架,特别是Session...

    hibernate的核心接口--Session

    - **定义**: Session 是 Hibernate 框架中最常用的接口之一,它又被称为持久化管理器。Session 负责所有与数据库交互的工作,包括管理持久化对象的生命周期,并通过提供第一级别的高级缓存来确保持久化对象的数据与...

    模拟hibernate的session.save()功能

    3. **事务处理**:在数据库操作中,事务管理至关重要,`session.save()`通常会包含在一个数据库事务中。你需要实现事务的开启、提交和回滚逻辑,确保数据的一致性。 4. **连接管理**:在没有Hibernate的情况下,你...

    Hibernate_11session

    通过以上介绍,我们可以看到Hibernate Session在数据库操作中的核心地位,正确理解和使用Session是掌握Hibernate的关键。实践中的具体应用需要结合项目需求,灵活运用这些知识,以实现高效、稳定的数据库访问。

    对Hibernate Session做一个简单的包装

    在Java的持久化框架中,Hibernate是一个非常流行的ORM(对象关系映射)工具,它使得开发者可以更加方便地处理数据库操作。本篇文章将探讨如何对Hibernate的`Session`进行简单的包装,以提升代码的可维护性和灵活性。...

    Hibernate管理Session和批量操作分析

    在Java的持久化框架Hibernate中,管理Session和执行批量操作是优化数据库交互的关键技术。本文主要探讨了如何高效地管理Hibernate的Session以及如何实施批量处理数据,这些技巧对于提升应用程序性能至关重要。 首先...

    HibernateSession , Transaction 研究

    在实际开发中,通常我们会将`Session`和`Transaction`的使用结合到一个单元操作中,例如在try-catch-finally块中: ```java SessionFactory sessionFactory = ...; // 获取SessionFactory Session session = ...

Global site tag (gtag.js) - Google Analytics