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(游离状态)对象实例的标识更新对应的持久化实例。 |
相关推荐
在Hibernate框架中,Session是与数据库交互的主要接口,它负责对象的持久化操作。然而,由于Session不是线程安全的,所以在多线程环境中管理Session就需要特别注意。本篇文章将详细探讨Hibernate中Session的管理,...
Session是Hibernate中的核心接口,它充当了应用程序和数据库之间的桥梁,负责对象的持久化操作,如保存、更新、删除和查询等。Session通常在一个事务中打开并在事务结束时关闭,以确保数据的一致性和完整性。 然而...
在应用中,用自定义SessionFactory创建的Session替换原生的Session,这样就可以在增删改查操作中使用自定义功能。 三、文件列表分析 "重写Session增删改查"这个压缩包可能包含了以下内容: - 源码示例:展示如何...
在Java的持久化框架中,Hibernate是一个非常重要的组件,它为开发者提供了强大的对象关系映射(ORM)功能,使得在Java应用中操作数据库变得更加简单。本文将深入探讨Hibernate中的核心概念——Session管理。 首先,...
Hibernate 是一个强大的Java对象关系映射(ORM)框架,它为开发者提供了在Java应用程序中操作数据库的强大工具。通过Hibernate,我们可以将数据库中的表与Java类进行映射,从而实现对数据库的操作,而无需编写大量的...
与Web开发中的`HttpSession`不同,`Hibernate Session`与JDBC的`Connection`更为相似,负责处理数据的持久化操作。`Session`具有短暂的生命周期,通常在一次数据库事务的开始和结束之间创建和关闭。 `Session`具有...
Hibernate的Session接口是Java应用程序与Hibernate之间主要的运行时交互接口,它提供了对持久化对象的创建、读取和删除操作。Session的概念是基于对象的状态管理和数据库事务的,它的生命周期通常与一个物理事务绑定...
这样,在查询操作中,Hibernate Session 将被正确地绑定到当前线程。 而在插入、修改和删除操作中,我们需要添加不同的注解: @Transactional(readOnly=false, propagation=Propagation.REQUIRED) public void ...
在Java的持久化框架中,Hibernate是一个非常重要的存在,它为开发者提供了强大的对象关系映射(ORM)功能,简化了数据库操作。本示例将深入探讨Hibernate Session的生命周期及其使用,帮助你更好地理解和运用这个...
3. **对象状态转换**:在`flush()`操作中,Hibernate可能将瞬态对象转换为持久化对象,或将持久化对象的状态更新到数据库。 4. **批量操作优化**:为了提高效率,`flush()`可能会合并多个小的更新或插入操作,形成...
当我们在Session上进行操作时,这些操作不会立即反映到数据库中,而是被缓存起来,直到调用`flush()`方法或者事务提交时才会真正执行。 在开始使用Session之前,需要配置Hibernate的环境,包括创建SessionFactory,...
在Java的持久化框架Hibernate中,Session对象是与数据库交互的核心组件,它负责管理对象的持久状态。在处理大量数据或者长时间运行的事务时,合理地管理Session的生命周期至关重要,这就涉及到了Hibernate的Session...
在Java的持久层框架Hibernate中,SessionFactory是核心组件之一,它是线程安全的,负责创建Session对象,每个Session对应于数据库的一次会话。配置SessionFactory主要是通过Hibernate的配置文件(通常为hibernate....
在IT行业中,数据库操作是应用程序开发中的重要环节,而Hibernate作为一个强大的对象关系映射(ORM)框架,极大地简化了Java应用程序对数据库的操作。本篇文章将深入探讨如何实现自己的Hibernate框架,特别是Session...
- **定义**: Session 是 Hibernate 框架中最常用的接口之一,它又被称为持久化管理器。Session 负责所有与数据库交互的工作,包括管理持久化对象的生命周期,并通过提供第一级别的高级缓存来确保持久化对象的数据与...
3. **事务处理**:在数据库操作中,事务管理至关重要,`session.save()`通常会包含在一个数据库事务中。你需要实现事务的开启、提交和回滚逻辑,确保数据的一致性。 4. **连接管理**:在没有Hibernate的情况下,你...
通过以上介绍,我们可以看到Hibernate Session在数据库操作中的核心地位,正确理解和使用Session是掌握Hibernate的关键。实践中的具体应用需要结合项目需求,灵活运用这些知识,以实现高效、稳定的数据库访问。
在Java的持久化框架中,Hibernate是一个非常流行的ORM(对象关系映射)工具,它使得开发者可以更加方便地处理数据库操作。本篇文章将探讨如何对Hibernate的`Session`进行简单的包装,以提升代码的可维护性和灵活性。...
在Java的持久化框架Hibernate中,管理Session和执行批量操作是优化数据库交互的关键技术。本文主要探讨了如何高效地管理Hibernate的Session以及如何实施批量处理数据,这些技巧对于提升应用程序性能至关重要。 首先...
在实际开发中,通常我们会将`Session`和`Transaction`的使用结合到一个单元操作中,例如在try-catch-finally块中: ```java SessionFactory sessionFactory = ...; // 获取SessionFactory Session session = ...