`
xiamizy
  • 浏览: 92305 次
  • 性别: Icon_minigender_1
  • 来自: 南京
博客专栏
78437efc-ad8e-387c-847f-a092d52e81a6
spring framew...
浏览量:4945
社区版块
存档分类
最新评论

hibernate中load,get;find,iterator;merge,saveOrUpdate,lock的区别

 
阅读更多

hibernate中load,get;find,iterator;merge,saveOrUpdate,lock的区别

转自http://www.blogjava.net/bnlovebn/archive/2007/07/13/130025.html

一、load,get
(1)当记录不存在时候,get方法返回null,load方法产生异常

(2)load方法可以返回实体的代理类,get方法则返回真是的实体类

(3)load方法可以充分利用hibernate的内部缓存和二级缓存中的现有数据,而get方法仅仅在内部缓存中进行数据查找,如果没有发现数据則将越过二级缓存,直接调用SQL查询数据库。
(4)也许别人把数据库中的数据修改了,load如何在缓存中找到了数据,则不会再访问数据库,而get则会返回最新数据。

二、find,iterator
(1) iterator首先会获取符合条件的记录的id,再跟据id在本地缓存中查找数据,查找不到的再在数据库中查找,结果再存在缓存中。N+1条SQL。
 (2)find跟据生成的sql语句,直接访问数据库,查到的数据存在缓存中,一条sql。

三、Hibernate生成的DAO类中函数功能说明(merge,saveOrUpdate,lock)

/**
* 将传入的detached状态的对象的属性复制到持久化对象中,并返回该持久化对象。
* 如果该session中没有关联的持久化对象,加载一个。
* 如果传入对象未保存,保存一个副本并作为持久对象返回,传入对象依然保持detached状态。
*/
public Sysuser merge(Sysuser detachedInstance) {
log.debug("merging Sysuser instance");
try {
Sysuser result = (Sysuser) getHibernateTemplate().merge(
detachedInstance);
log.debug("merge successful");
return result;
} catch (RuntimeException re) {
log.error("merge failed", re);
throw re;
}
}

/**
* 将传入的对象持久化并保存。 如果对象未保存(Transient状态),调用save方法保存。
* 如果对象已保存(Detached状态),调用update方法将对象与Session重新关联。
*/
public void attachDirty(Sysuser instance) {
log.debug("attaching dirty Sysuser instance");
try {
getHibernateTemplate().saveOrUpdate(instance);
log.debug("attach successful");
} catch (RuntimeException re) {
log.error("attach failed", re);
throw re;
}
}

/**
* 将传入的对象状态设置为Transient状态
*/
public void attachClean(Sysuser instance) {
log.debug("attaching clean Sysuser instance");
try {
getHibernateTemplate().lock(instance, LockMode.NONE);
log.debug("attach successful");
} catch (RuntimeException re) {
log.error("attach failed", re);
throw re;
}
}

分享到:
评论

相关推荐

    Hibernate教程24_Hibernate的补充_list与iterator

    【标题】"Hibernate教程24_Hibernate的补充_list与iterator" 在Java开发中,Hibernate作为一款流行的ORM(对象关系映射)框架,极大地简化了数据库操作。本教程将重点讲解在使用Hibernate时,如何处理查询结果集合...

    Hibernate入门文档

    Hibernate 难点解析: hibernate中uuid和...Hibernate get与load的区别 hibernate二级缓存中list和iterator的用法 Hibernate中的对象有三种状态: lock和update区别 save 和update区别 update 和saveOrUpdate区别

    hibernate难点重点笔记

    本文将针对Hibernate中的几个重要概念进行详细讲解,包括主键生成策略、get()与load()的区别以及二级缓存的使用。 首先,探讨的是Hibernate中的主键生成策略。在Hibernate中,主键的生成主要有三种方式:uuid、...

    for,foreach,iterator的用法和区别

    "for、foreach、iterator的用法和区别" 在 Java 编程语言中,for、foreach 和 iterator 是三种常用的遍历数组和集合的方法。它们之间有相似之处,但也存在着许多不同之处。 相同点:三者都可以用来遍历数组和集合...

    Hibernate持久层方法汇总

    本文将详细介绍Hibernate持久层中的一些核心方法,包括`session.load`, `session.find`, `session.iterator`, `session.save`, `session.update`, `session.saveorupdate`。 1. `session.load()`: - `load()`方法...

    Hibernate三种状态

    2. 使用find(), get(), load()或iterator()等查询方法获取的对象直接成为持久对象。 3. 持久对象在Session关闭后变为脱管对象,或者通过clear(), evict()方法主动从Session中移除。 4. 脱管对象可以被Session的merge...

    hibernate中的几个重要方法以及调用[参照].pdf

    本文将深入探讨Hibernate中的一些重要方法及其调用,包括get()、load()、list()、iterator()以及HQL查询的相关知识点。 1. get()与load()方法: - get()方法:当尝试获取一个对象时,get()首先会在一级缓存中查找...

    使用hibernate封装方法

    在Java Web开发中,Hibernate是一个强大的对象关系映射(ORM)框架,它简化了数据库与Java对象之间的交互。Struts是MVC(模型-视图-控制器)框架,用于处理HTTP请求,而JSP(JavaServer Pages)则用于创建动态网页。...

    JAVA中的Iterator的用法

    ### JAVA中的Iterator的用法详解 #### 一、概述 在Java编程语言中,`Iterator`接口扮演着遍历集合的重要角色。它提供了一种方式,使得开发人员能够以一致的方式遍历各种类型的集合,无需了解集合的具体实现细节。...

    jsp自定义标签iterator遍历list[整理].pdf

    本文主要介绍了在 JSP 中使用自定义标签 Iterator 遍历 List,并对标签的实现过程进行了详细的解释。 标签的概念和作用 在 JSP 中,标签是一种特殊的组件,它可以根据需要执行不同的操作。自定义标签可以满足特定...

    Iterator用法

    ### C++中的Iterator模式详解 #### 什么是Iterator模式? 在软件工程中,设计模式是一种用于解决特定问题的通用可重用解决方案。Iterator模式是其中的一种,其主要目标是在不暴露集合内部结构的情况下,为遍历集合...

    hibernate中文api开发文档

    2. **对象的加载(Load/Get)**: 根据主键从数据库中加载对象,Load方法确保返回的是同一对象实例,而Get方法可能返回新实例。 3. **对象的更新(Update)**: 更新数据库中的对象,包括对象属性的修改。 4. **对象...

    Hibernate面试题-详尽解析

    #### 一、主键生成方式中的`native`与`identity`区别 **1.1 native方式** - **定义**: `native`是一种动态选择标识符生成策略的方式,它根据所使用的底层数据库系统自动选择最适合的生成器(如`identity`、`...

    JDBC与Hibernate区别

    Java开发人员来说,JDBC(Java Database Connectivity)和Hibernate是两个重要的数据库操作工具。它们各自具有独特的优点和适用场景。 JDBC是Java平台的标准接口,用于连接和操作各种类型的数据库。它提供了直接的...

    在Hibernate中处理批量更新和批量删除

    在IT领域,尤其是在Java开发与数据库交互的过程中,Hibernate作为一个强大的对象关系映射(ORM)框架,为开发者提供了诸多便利。然而,在处理大量数据时,如何有效地进行批量更新和批量删除操作,是每一个开发者都...

    模拟java ArrayList Iterator

    ArrayList提供了一种高效的方式来管理大量的元素,并且提供了迭代器(Iterator)来遍历这些元素,使得我们可以在不暴露底层实现细节的情况下访问和修改列表中的元素。这个资源的目的是通过模拟Java ArrayList的...

    struts2中iterator 标签的使用详解

    ### Struts2中Iterator标签的深入解析与应用 在Struts2框架中,`<s:iterator>`标签是一个非常强大的工具,用于在JSP页面上循环遍历集合数据,如列表(List)、数组、Map等。它允许开发者以一种动态且灵活的方式展示...

    jdbc和hibernate的区别

    2. **非线程安全**:JDBC和Hibernate中的数据库连接或会话对象都不是线程安全的,因此在多线程环境中使用时需要注意同步控制。 3. **事务管理**:两者都支持显式的事务处理,可以通过编程方式来控制事务的提交和回滚...

    hibernate 调优

    2. **Session 的 load/get 方法**:load 会尝试从二级缓存中获取数据,而 get 不会。 3. **Query 和 list/iterator**:list 仅利用查询缓存,而 iterator 可以利用二级缓存。iterator 在处理大量数据时更为高效,...

    iterator_adaptor.pdf

    Boost库中的`iterator_adaptor`是一个强大的工具,用于创建自定义迭代器。这个模板类允许程序员以一种灵活的方式包装现有的迭代器类型,以适应特定的需求或扩展其功能。`iterator_adaptor`的设计理念是基于`iterator...

Global site tag (gtag.js) - Google Analytics