`
gary0416
  • 浏览: 333968 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

hibernate session的常用方法

阅读更多

persist()方法和save()方法

persist()方法是在Hibernate3版本中才出现的,实现了EJB3规范中定义的持久化语义,persist()方法不保证立即为持久化对象的OID赋值,而是有可能在Session清理缓存时才为OID赋值.

 

session.save()方法并不立即执行SQL insert语句,只有当Session清理缓存时,才会执行SQL语句,如果在save()方法后,又修改了持久化对象的属性,清理缓存时会额外执行SQL update语句.

 

load()get()方法

都能根据给定OID从数据库中加载一个持久化对象.当数据库中不存在与OID对应的记录时,load()方法抛出org.hibernate.ObjectNotFoundException异常,get()方法返回null.检索策略不同,默认情况下load()方法会采用延迟检索策略加载持久化对象,除非lazy=false,get()方法总是采用立即检索策略.

如果加载一个对象的目的是为了访问它的各个属性,可以用get()方法

如果加载一个对象的目的是为了删除或建立与别的对象的关联关系,可以用load()方法.

 

update()方法

只有在清理缓存的时候才会执行update语句,因此多次修改对象属性也只执行一次update.

如果希望session仅当修改了对象的属性时,才执行update语句,可以把映射文件中<class>元素的select-before-update设为true,默认false,修改后会先执行select进行比较.

 

saveOrUpdate()方法

如果传入参数是临时对象,调用save()方法,如果参数是游离对象,调用update()方法,如果参数是持久化对象,直接返回.

如果满足以下情况之一,Hibernate把它当做临时对象,否则作为游离对象.

1.         Java对象的OID取值为null.

2.         Java对象具有version版本控制属性并且取值为null.

3.         在映射文件中为<id>元素设置了unsaved-value属性,并且Java对象的OID取值与这个unsaved-value属性值匹配

4.         在映射文件中为version版本控制属性设置了unsaved-value属性,并且Java对象的version版本控制属性的取值与映射文件中unsaved-value属性值匹配.

5.         HibernateInterceptor提供了自定义的实现,并且Interceptor实现类的isUnsaved()方法返回Boolean.TRUE

 

merge()方法

把一个游离对象的属性复制到一个持久化对象中.

merge()方法处理流程:

1.         根据游离对象的OIDsession缓存中查找匹配的持久化对象.

2.         如果在缓存中没有找到与游离对象的OID一致的持久化对象,就根据这个OID从数据库中加载持久化对象.如果在数据库中存在这样的持久化对象,就把游离对象的属性复制到这个刚加载的持久化对象中,计划执行一条update语句,再返回这个持久化对象的引用.

3.         如果merge()方法的参数是一个临时对象,那么也会创建一个新的对象,把临时对象的属性复制到这个新建的对象中,再调用save()方法持久化这个独享,最后返回这个持久化对象的引用.

 

delete()方法

从数据库中删除一个Java对象,可以删除持久化对象,游离对象.

delete()方法处理过程:

1.         如果参数是游离对象,先使游离对象被当前session关联,使它变为持久化对象.如果参数是持久化对象则忽略这一步.此步骤确保使用拦截器的场合下,拦截器能正常工作.

2.         计划执行一个delete语句

3.         把对象从Session缓存中删除,该对象进入删除状态.

 

如果设置hibernate.use_identifier_rollbacktrue,delete()方法会把持久化对象或游离对象的OID置为null,使它们转变为临时对象,这样程序就可以重复使用这些临时对象了.

 

replicate()方法

把一个数据库中的对象复制到另一个数据库中.

第二个参数复制模式:

ReplicationMode.IGNORE:如果在目标数据库中已经存在OID相同的对象,无操作.

ReplicationMode.OVERWRITE:如果目标数据库中已经存在OID相同的对象,覆盖.

ReplicationMode.EXCEPTION:如果目标数据库中已经存在OID相同的对象,抛异常.

ReplicationMode.LAST_VERSION:如果目标数据库中已经存在OID相同的对象,比较两个对象的版本,新则覆盖,否则无操作.要求Hibernate采用的乐观锁并发控制.

session在清理缓存时,按如下顺序执行SQL语句

按照应用程序调用session.save()方法的先后顺序,执行所有对实体进行插入的insert语句.

执行所有对实体进行更新的update语句.

执行所有对集合进行删除的delete语句.

执行所有对集合元素进行删除,更新或者插入的SQL语句.

执行所有对集合进行插入的insert语句.

按照应用程序调用session.delete()方法的先后顺序,执行所有对实体进行删除的delete语句.

 

如果对象使用native生成器来生成OID,那么当调用sessionsave()方法保存该对象时,会立即执行向数据库插入该实体的insert语句.

 

默认情况下,session会在以下时间点清理缓存

当应用程序调用org.hibernate.Transactioncommit()方法时候,先清理缓存,再向数据库提交事务.

当应用程序执行一些查询操作时,如果缓存中持久化对象的属性已经发生了变化,就会先清理缓存,使session缓存与数据库同步,保证查询结果正确.

当应用程序显示调用sessionflush()方法时.

 

改变清理缓存时间点

session.setFlushMode(FlushMode.COMMIT)

清理缓存的模式

各种查询方法

Transactioncommit()

Sessionflush()

FlushMode.AUTO(默认)

清理

清理

清理

FlushMode.COMMIT

不清理

清理

清理

FlushMode.NEVER

不清理

不清理

不清理

 

1
0
分享到:
评论

相关推荐

    hibernate和session学习

    `Session`的常用方法包括:`save()`, `update()`, `delete()`, `get()`, `load()`, `query()`等。 1. `save()` 和 `update()`: `save()`用于将新对象持久化到数据库,如果对象已经存在,可以使用`update()`来更新其...

    Hibernate的Session的javadoc

    这是最常用的持久化方法。 - **update()**:更新数据库中与对象关联的记录,对象必须处于持久化状态。 - **merge()**:将游离或自由状态的对象合并到当前Session,创建一个新的持久化实例。 - **replicate()**:...

    hibernate常用方法集合

    `HibernateSessionFactory` 类是Hibernate应用中常见的一个工具类,用于管理和提供与当前线程相关的Session实例。让我们详细了解一下`HibernateSessionFactory`类中的关键方法和其背后的原理。 1. **配置和初始化...

    Hibernate三种状态和Session常用的方法

    Hibernate三种状态和Session常用的方法 Hibernate 作为一个流行的 Java 持久层框架,提供了对数据库的操作能力,其中Session 是 Hibernate 中最核心的接口,负责管理对象的生命周期。为了更好地理解 Hibernate 的...

    hibernate各种常用方法的详解

    ### Hibernate 常用方法详解 #### 一、前言 Hibernate 是一款强大的对象关系映射(ORM)框架,它简化了 Java 应用程序与数据库之间的交互过程。本文将详细介绍 Hibernate 中常用的几种方法,包括 `save`, `update`...

    hibernate的核心接口--Session

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

    Hibernate中获取Session的两种方式代码示例

    Hibernate中获取Session的两种方式代码示例 Hibernate 是一个流行的基于Java的持久层框架,提供了对数据库的...通过 HibernateUtil 工具类和通过 SessionFactory 获取当前 Session 是两种常用的获取 Session 的方式。

    04_传智播客hibernate教程_Session接口及getloadpersist方法

    本教程聚焦于Hibernate中的Session接口以及get、load、persist这三个常用的方法,它们是 Hibernate 实现对象-关系映射(ORM)的核心组件。 首先,我们来理解Session接口。Session在Hibernate中扮演着数据库连接的...

    hibernate 常用核心包

    "hibernate 常用核心包"包含了 Hibernate 框架中必要的组件,使得开发者可以进行基本的数据库操作和应用程序开发。 在 Hibernate 中,以下几个核心包是至关重要的: 1. **hibernate-core**: 这是 Hibernate 的核心...

    Spring与Hibernate集成中的session

    - `HibernateTemplate`是Spring提供的一个便捷工具,它封装了`Session`的常用操作,如查询、保存、更新和删除,简化了编码,同时也支持事务管理。 - 使用`HibernateTemplate`可以避免直接操作`Session`,减少可能...

    hibernate里面常用jar包

    1. **hibernate-core-x.x.x.Final.jar**:这是Hibernate的核心库,包含了所有必要的组件,如Session接口、SessionFactory、实体管理、事务处理等。它是使用Hibernate进行开发的基础。 2. **javassist-x.x.x.GA.jar*...

    Hibernate的Template方法以及SQL简介

    其中,`HibernateTemplate`作为该框架提供的一个实用工具类,封装了一系列常用的数据库操作方法,使得开发者能够更加高效地进行数据访问与管理。 #### 一、`HibernateTemplate`的常用方法简介 `HibernateTemplate`...

    Hibernate方法总结

    `exposeNativeSession`参数决定是否暴露底层的JDBC Session给回调方法,这在需要直接使用原生SQL或者处理特定事务管理时非常有用。 总的来说,HibernateTemplate提供了一组强大的方法来简化Hibernate的日常操作,...

    hibernate 3.5.5 常用jar包

    在这个“hibernate 3.5.5 常用jar包”中,包含了运行和开发基于Hibernate 3.5.5应用所需的核心库。以下是关于Hibernate 3.5.5及其相关jar包的关键知识点: 1. **对象关系映射(ORM)**:ORM是将数据库中的表映射为...

    hibernate 常用jar 包

    下面我们将详细探讨Hibernate常用JAR包及其作用。 1. **hibernate-core.jar**:这是Hibernate的核心库,包含了主要的ORM功能,包括实体管理、持久化操作、事务管理和查询服务。它提供了对Hibernate Session和...

    Hibernate实例代码,含常用方法

    本资源是关于Hibernate框架的实例代码集合,涵盖了其常用的方法,旨在帮助开发者快速理解和应用Hibernate到实际项目中。Hibernate是一个强大的Java持久化框架,它简化了数据库操作,使得开发人员可以更加专注于业务...

    Hibernate 参数查询通用方法

    在Dao层实现通用方法时,我们可以抽象出一个基类,包含一些常用的方法,如`queryByParams`,这个方法接受一个Map参数,键对应于HQL或Criteria查询中的参数名,值则是参数的实际值。这样,不同的查询只需要传入不同的...

    hibernate3.5.5常用jar包搜集

    这个压缩包“hibernate3.5.5常用jar包搜集”包含了用于使用Hibernate 3.5.5版本进行开发所需的库文件。 在Hibernate 3.5.5中,主要的jar包包括以下几类: 1. **Hibernate Core**:这是Hibernate的核心库,包含ORM...

    Hibernate常用包及XML

    本主题将详细探讨Hibernate中的常用包及其对应的XML配置,帮助你深入理解Hibernate的工作原理。 1. **org.hibernate**:这是Hibernate的核心包,包含了所有基本的API和接口,如SessionFactory、Session、Query等。...

    hibernate常用包(包含数据库)

    标题中的“hibernate常用包(包含数据库)”指的是Hibernate框架的基础组件,这些组件是进行JavaWeb开发中数据持久化操作的关键。Hibernate是一个强大的对象关系映射(ORM)框架,它简化了Java应用程序与数据库之间...

Global site tag (gtag.js) - Google Analytics