`

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和批量操作的技巧,包括Hibernate管理Session、批量处理数据等的常用技巧及注意事项,具有一定的参考借鉴价值,需要的朋友可以参考下

    hibernate操作数据库笔记

    使用Hibernate的Session对象操作数据库 1.初始化Hibernate:在要使用Hibernate的类的方法中实例化Configuration对象并用Configuration对象的configure()方法将hibernate.cfg.xml中的配置加载到内存,即: ...

    Hibernate中Session增删改查操作代码详解

    主要介绍了Hibernate中Session增删改查操作代码详解,具有一定借鉴价值,需要的朋友可以参考下。

    hibernate通过session实现增删改查操作实例解析

    主要介绍了hibernate通过session实现增删改查操作实例解析,具有一定借鉴价值,需要的朋友可以参考下。

    Hibernate体系结构的概要图

    这里当使用session这个术语时,其实指的是Hibernate中的session,而以后会将HttpSession对象称为用户session。  SessionFactory接口 SessionFactory接口负责初始化Hibernate。它充当数据存储源的代理,并负责创建...

    Hibernate+中文文档

    3.8.3. 在JTA环境下使用Current Session context (当前session上下文)管理 3.8.4. JMX部署 4. 持久化类(Persistent Classes) 4.1. 一个简单的POJO例子 4.1.1. 实现一个默认的(即无参数的)构造方法...

    Hibernate中文详细学习文档

    3.8.3. 在JTA环境下使用Current Session context (当前session上下文)管理 3.8.4. JMX部署 4. 持久化类(Persistent Classes) 4.1. 一个简单的POJO例子 4.1.1. 实现一个默认的(即无参数的)构造方法...

    hibernate3.2中文文档(chm格式)

    HIBERNATE - 符合Java习惯的关系数据库持久化 Hibernate参考文档 3.2 -------------------------------------------------------------------------------- 目录 前言 1. 翻译说明 2. 版权声明 1. Hibernate...

    Hibernate 中文 html 帮助文档

    3.8.3. 在JTA环境下使用Current Session context (当前session上下文)管理 3.8.4. JMX部署 4. 持久化类(Persistent Classes) 4.1. 一个简单的POJO例子 4.1.1. 实现一个默认的(即无参数的)构造方法(constructor)...

    hibernate3

    一个SessinFactory实例对应一个数据存储源,应用从SessionFactory中获得Session实例。如果应用同时访问多个DB,怎需要为每个数据库创建一个单独的SessionFactory实例。 (3)Session:也被称为持久化管理器,对象级...

    Spring+hibernate+quartz 定时操作数据库

    在spring+hibernate的框架中定时操作数据库,主要是拿到sessionFactory,不会出现no session 和transaction no-bound等问题,由sessionFactory完成对数据的操作,有些包是没有用的,有兴趣的可以自己删除掉

    利用Spring来管理Hibernate完整例子

    其中Hibernate每次都需要手动创建SessionFactory,Session,手动开启提交关闭事务。而这一切操作完全是由Spring来代替。使持久层更加方便,使开发人员减少持久层操作,把注意力放到业务上。

    hibernate简介及优缺点

    持久化:将内存中的瞬时态数据保存成数据库中持久态数据的操作 1.瞬时态:以new命令实例化后从未用session将其与数据库关联(保存)过的对象,如果没有任何变量/方法对其进行引用它将被JVM回收 2.持久态:用session的...

    HibernateAPI中文版.chm

    HIBERNATE - 符合Java习惯的关系数据库持久化 Hibernate参考文档 3.2 -------------------------------------------------------------------------------- 目录 前言 1. 翻译说明 2. 版权声明 1. Hibernate...

    Hibernate实战(第2版 中文高清版)

     10.1.2 Hibernate应用程序中的事务   10.1.3 使用Java Persistence的事务   10.2 控制并发访问   10.2.1 理解数据库级并发   10.2.2 乐观并发控制   10.2.3 获得额外的隔离性保证   10.3 非事务数据...

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

     3.5.2 访问Hibernate的Session接口  3.6 运行helloapp应用  3.6.1 创建运行本书范例的系统环境  3.6.2 创建helloapp应用的目录结构  3.6.3 把helloapp应用作为独立应用程序运行  3.6.4 把helloapp应用作为...

    马士兵hibernate学习笔记(原版)

    1 注意session.clear()的运用,尤其在不断分页循环的时候 2 1+N问题 (典型的面试题) (详见 hibernate_2800_Hibernate_1+N项目) 3 list和iterate不同之处(//主要为了面试 详见hibernate_2900_Hibernate_list_...

    Hibernate学习笔记

    001 Hibernate 简介(开源 O/R 映射框架) 002 第一个 Hibernate 示例 003 hibernate 主要接口...026 hibernate 操作树形结构 027 hibernate 查询语言(HQL) 028 hibernate 缓存(性能优化策略) 029 hibernate 抓取策略

    jsp:用hibernate分页显示上一页,下一页,首页,末页

    这是一个类,可以通用,只要传入两个参数即可,一个是...Query query是hibernate中session创建的query;字符char ch代表操作:‘a’就是all全部,'n'就是next下一页,'u'就是up上一页;'e'就是end末页,'s'就是start首页

    Hibernate 中文api文档下载

    Session 、 Transaction 、 Query 接口。 2 .配置 Hibernate 的接口 Configuration 接口。 3 .回调接口 ...

Global site tag (gtag.js) - Google Analytics