`
shenshuibomb
  • 浏览: 25326 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

Hibernate中get和load的一點點區別。

阅读更多

本段是摘自Java Persistence with Hibernate中文版的第299頁。

   get()和 load()之間的一個區別在於它們如何表明實例無法被找到。如果数据库中不存在包含給定標識符值的行,get()就返回null。load()方法拋出一個ObjectNotFoundException 。

更重要的是,load()方法可能返回一个代理(proxy),一个占位符,而不命中数据库。这个结果就是稍后你可能得到一个ObjectNotFoundException,一旦你试图访问返回的占位符,就立即强制它初始化。(这也称作延迟加载(lazy loading))。

load()方法始终试图返回一个代理,如果它已经由当前的持久化上下文管理,则仅返回一个已被初始化的对象实例。

此处有一个代码的示例。

-------------------------------------------------------------------------------------------------------------------------

By load

package hello;

import org.hibernate.*;
import org.hibernate.Criteria;
import java.util.*;
import org.hibernate.criterion.Restrictions;
import persistence.HibernateUtil;

/**
*
* @author zhangqi
*/
public class HelloWorld {

public static void main(String[] args)
{
Session session = HibernateUtil.getSessionFactory().openSession();
Transaction tx = session.beginTransaction();
Message message = new Message("Hello World");
session.persist(message);
tx.commit();
session.close();


Session thirdSession = HibernateUtil.getSessionFactory().openSession();
System.out.println(thirdSession.load(Message.class, 2l)); // Create a Excepiton

thirdSession.close();

HibernateUtil.shutdown();

}
}

-------------------------------------------------------------------------------------------------------------------------

By get

package hello;

import org.hibernate.*;
import org.hibernate.Criteria;
import java.util.*;
import org.hibernate.criterion.Restrictions;
import persistence.HibernateUtil;

/**
*
* @author zhangqi
*/
public class HelloWorld {

public static void main(String[] args)
{
Session session = HibernateUtil.getSessionFactory().openSession();
Transaction tx = session.beginTransaction();
Message message = new Message("Hello World");
session.persist(message);
tx.commit();
session.close();


Session thirdSession = HibernateUtil.getSessionFactory().openSession();
System.out.println(thirdSession.get(Message.class, 2l)); //Print a nullon console

thirdSession.close();

HibernateUtil.shutdown();

}
}

分享到:
评论

相关推荐

    hibernate中get和load方法的区别

    在Java的持久化框架Hibernate中,`get`和`load`方法都是用于从数据库中获取对象,但它们之间存在一些重要的区别。理解这些差异对于优化应用程序的性能和避免潜在问题至关重要。 首先,`get`方法是直接从数据库中...

    Hibernate的get和load方法的区别

    在Java的持久化框架Hibernate中,`get`和`load`方法都是用于从数据库中获取对象,但它们之间存在一些重要的区别。理解这些差异对于优化应用程序的性能和避免潜在问题至关重要。 首先,让我们来深入了解一下`get`...

    hibernate get load区别

    ### Hibernate中的Get与Load方法详解 #### 概述 在Hibernate框架中,`get`与`load`方法都是用于从数据库加载实体对象的常用手段。然而,这两种方法在实现细节上有着本质的区别,这些差异主要体现在对缓存的利用、...

    hibernate中get和load的区别共5页.pdf

    标签“hibernate中get和lo”暗示了标签可能被意外截断,但我们可以推断完整标签可能是“hibernate中get和load的区别”。 在实际开发中,选择使用`get`还是`load`取决于具体需求。如果需要立即从数据库中获取对象,...

    Hibernate中get和load方法的区别以及close(),clear()、evict()等的区别

    首先,让我们关注`get`和`load`的区别: 1. **返回结果对比**: - `load`方法如果找不到对应的记录,会抛出`org.hibernate.ObjectNotFoundException`异常。这是因为`load`方法假设给定的ID肯定在数据库中存在,它...

    hibernate 三种 查询 方式 load与get的区别

    本篇文章将详细解析Hibernate中的三种主要查询方式——HQL(Hibernate Query Language)、Criteria API和Query API,并着重讨论`load()`与`get()`方法的区别。 一、HQL查询 Hibernate Query Language(HQL)是...

    Hibernate查询 load与get的区别及其它查询测试

    `load`和`get`方法是Hibernate中用于检索实体的两种主要方式,它们都是从Session接口中调用,但有明显的区别和各自的适用场景。 1. `load`方法: - `load`方法主要用于根据主键加载对象,它返回一个代理对象,而...

    Hibernate中get()和load()的区别.docx

    在Hibernate ORM框架中,获取持久化对象的两种主要方法是`get()`和`load()`。它们都是用来根据主键ID查询数据库中的实体对象,但两者在执行机制和返回结果上有显著的区别。 1. `get()`方法 当调用`session.get()`...

    session的get与load比较

    在Hibernate中,`Session`接口提供了`get`和`load`两种方法来获取数据库中的实体对象。 1. **get** 方法:尝试从当前Session的缓存中获取指定ID对应的实体对象;如果缓存中不存在,则直接执行SQL查询语句从数据库中...

    gilead hibernate lazyload例子

    Gilead,全称为Hibernate for Flex,是用于Flex和Hibernate之间的数据绑定工具,它提供了一种在Flex客户端和Hibernate服务端之间通信的方法,使得Flex应用程序可以利用Hibernate的懒加载功能。然而,由于历史原因,...

    Hibernate中Session.get()方法和load()方法的详细比较

    Hibernate中Session.get()方法和load()方法是两个常用的数据访问方法,但它们之间有着本质的区别。 首先,从返回值上看,get()方法直接返回实体类,如果查不到数据则返回null。load()方法则返回一个实体代理对象,...

    Hibernate中load方法与get方法的区别

    在Hibernate框架中,`load()`和`get()`都是用于从数据库中检索对象的方法,但它们在功能和行为上存在显著的差异。理解这些差异对于优化应用程序的性能和处理潜在异常至关重要。 首先,`load()`方法执行延迟加载策略...

    hibernate_reference中文版和Hibernate中文手册

    5. CRUD操作:Hibernate提供了便捷的方法来完成创建(save()、persist())、读取(get()、load()、query())、更新(update()、merge())和删除(delete())对象的操作。其中,HQL(Hibernate Query Language)和...

    hibernate中文文档 HTML格式

    Hibernate是一个开源的对象关系映射(ORM)框架,它允许Java开发者在Java对象和数据库记录之间建立映射,从而简化数据库编程。这篇“Hibernate中文文档 HTML格式”提供了丰富的关于Hibernate的知识,便于中文用户...

    hibernate get/load/saveOrUpdate/statistics

    博文链接:https://log-cd.iteye.com/blog/205166

    Hibernate中文Api最新参考文档

    例如,使用`save()`或`saveOrUpdate()`方法保存实体,`load()`或`get()`方法获取实体,`update()`或`merge()`更新实体,以及`delete()`方法删除实体。 事务处理是数据库操作的重要部分,Hibernate通过`Transaction`...

    hibernate 中文参考文档

    此外,还包括了持久化操作,如保存(save或persist)、更新(update)、删除(delete)以及加载(get或load)实体的方法。 关于关联映射,文档会讲解一对一、一对多、多对一、多对多等各种关联关系的建立,以及如何...

Global site tag (gtag.js) - Google Analytics