返回顶部
首页 > 资讯 > 数据库 >hibernate中get和load的区别
  • 452
分享到

hibernate中get和load的区别

2024-04-02 19:04:59 452人浏览 安东尼
摘要

 1. get是立即执行sql语句,load是只有访问了对象的非id属性时才执行sql语句 2. get获取一个对象时,如果找不到,则返回null, load获取对象时,如果找不到,则抛

 1. get是立即执行sql语句,load是只有访问了对象的非id属性时才执行sql语句

 2. get获取一个对象时,如果找不到,则返回null, load获取对象时,如果找不到,则抛出ObjectNotFoundException

 3. get获取到的对象是一个真实类型的对象,load获取到的对象是一个代理对象,代理对象的类是Hibernate自己创建的类,该类是真实类的子类!

    如何禁用load的延迟加载:

    a. 给真实的User类加上final修饰符。

    b. 在User.hbm.xml的<class>元素上添加一个lazy="false"


hibernate中sql的执行时间:

    

1. 当一个对象从没有OID (Object id) 到有 OID的时候,就立即执行sql语句。

 2. 当一个对象从有OID (Object id) 到有 OID的时候,就会才事务提交的时候才执行sql语句。

 

 3. load是类级别的延迟加载,当我们使用load加载应数据库中的对象时,如果该对象从来没有使用过,则hibernate根本不查库!

        只有访问了该对象的非id属性时,才执行sql语句!!


补充:

    

hibernate中get方法和load方法的根本区别在于:如果你使用load方法,hibernate认 为该id对应的对象(数据库记录)在数据库中是一定存在的,所以它可以放心的使用,它可以放心的使用代理来延迟加载该对象。在用到对象中的其他属性数据时 才查询数据库,但是万一数据库中不存在该记录,那没办法,只能抛异常,所说的load方法抛异常是指在使用该对象的数据时,数据库中不存在该数据时抛异 常,而不是在创建这个对象时。由于session中的缓存对于hibernate来说是个相当廉价的资源,所以在load时会先查一下session缓存 看看该id对应的对象是否存在,不存在则创建代理。所以如果你知道该id在数据库中一定有对应记录存在就可以使用load方法来实现延迟加载。 

    对于get方法,hibernate会确认一下该id对应的数据是否存在,首先在session缓存中查找,然后在二级缓存中查找,还没有就查数据库,数据库中没有就返回null。

    对于load和get方法返回类型:虽然好多书中都这么说:“get()永远只返回实体类”,但实际上这是不正确的,get方法如果在 session缓存中找到了该id对应的对象,如果刚好该对象前面是被代理过的,如被load方法使用过,或者被其他关联对象延迟加载过,那么返回的还是 原先的代理对象,而不是实体类对象,如果该代理对象还没有加载实体数据(就是id以外的其他属性数据),那么它会查询二级缓存或者数据库来加载数据,但是 返回的还是代理对象,只不过已经加载了实体数据。

    get方法首先查询session缓存,没有的话查询二级缓存,最后查询数据库;反而load方法创建时首先查询session缓存,没有就创建代理,实际使用数据时才查询二级缓存和数据库。

    总之对于get和load的根本区别,一句话,hibernate对于load方法认为该数据在数据库中一定存在,可以放心的使用代理来延迟加载,如果在使用过程中发现了问题,只能抛异常;而对于get方法,hibernate一定要获取到真实的数据,否则返回null。


您可能感兴趣的文档:

--结束END--

本文标题: hibernate中get和load的区别

本文链接: https://lsjlt.com/news/38428.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • hibernate中get和load的区别
     1. get是立即执行sql语句,load是只有访问了对象的非id属性时才执行sql语句 2. get获取一个对象时,如果找不到,则返回null, load获取对象时,如果找不到,则抛...
    99+
    2024-04-02
  • Java hibernate延迟加载get和load的区别
    目录前言一.load加载方式二、get加载方式三、使用get和load时的一些小问题前言 在hibernate中我们知道如果要从数据库中得到一个对象,通常有两种方式,一种是通过ses...
    99+
    2024-04-02
  • php中post和get的区别
    post 和 get 是 php 中两种 http 方法,用于向服务器提交数据。主要区别在于:post 将数据隐藏在请求主体中,而 get 将数据附加到请求 url 中。此外,post ...
    99+
    2024-04-27
    敏感数据
  • Hibernate PO和Hibernate VO有哪些区别
    这篇文章给大家分享的是有关Hibernate PO和Hibernate VO有哪些区别的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。PO(Persistence Object )和VO(Value Ob...
    99+
    2023-06-17
  • Ubuntu中,snap、apt和apt-get的区别
    文章目录 apt与apt-get的区别apt与snap的区别总结 apt与apt-get的区别 实际上,apt和apt-get没有什么区别,只是apt比apt-get更高级一点 apt支持进度条显示apt支持颜色输出,但是a...
    99+
    2023-08-30
    ubuntu linux 服务器
  • Hibernate中VO和PO的区别有哪些
    这篇文章将为大家详细讲解有关Hibernate中VO和PO的区别有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。VO,值对象(Value Object),PO,持久对象(Persisent Objec...
    99+
    2023-06-17
  • get和post请求的区别
    GET请求和POST请求是HTTP协议中常用的两种请求方式,它们在以下几个方面有所区别:1. 参数传递方式:- GET请求将参数包含...
    99+
    2023-09-21
    get
  • Hibernate和MyBatis的区别是什么
    这篇文章给大家分享的是有关Hibernate和MyBatis的区别是什么的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Hibernate 和 MyBatis 的区别相同点都是对j...
    99+
    2024-04-02
  • jpa和hibernate的区别是什么
    JPA(Java Persistence API)是Java EE平台的一部分,是一种定义了对象-关系映射(ORM)规范的API。而...
    99+
    2023-08-14
    jpa hibernate
  • php中get和set的区别是什么
    本教程操作环境:windows10系统、PHP7.1版、DELL G3电脑php中get和set的区别是什么一般来说,总是把类的属性定义为private,这更符合现实的逻辑。但是,对属性的读取和赋值操作是非常频繁的,因此在PHP5中,预定义...
    99+
    2014-11-04
    PHP
  • JQuery中eq()和get()的区别是什么
    JQuery中eq()和get()的区别是什么?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。jquery是什么jquery是一个简洁而快速的JavaScript库,它具有独特的...
    99+
    2023-06-14
  • properties中load()和store()的区别有哪些
    这篇文章主要介绍properties中load()和store()的区别有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1.loadload(InputStream instream) 从输入流中读取属性列表(键...
    99+
    2023-06-02
  • ajax中post和get有哪些区别
    本篇内容主要讲解“ajax中post和get有哪些区别”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“ajax中post和get有哪些区别”吧! ...
    99+
    2024-04-02
  • jquery中eq()和get()有哪些区别
    这篇文章给大家分享的是有关jquery中eq()和get()有哪些区别的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。 区别:1、eq()方法返回的是j...
    99+
    2024-04-02
  • jQuery中$.get和$.post有什么区别
    这篇文章给大家介绍jQuery中$.get和$.post有什么区别,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。jquery是什么jquery是一个简洁而快速的JavaScript库,它具有独特的链式语法和短小清晰的多...
    99+
    2023-06-14
  • laravel中get和all有哪些区别
    这篇文章主要讲解了“laravel中get和all有哪些区别”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“laravel中get和all有哪些区别”吧!在laravel中,get和all都可...
    99+
    2023-06-29
  • php中get和set有哪些区别
    这篇文章主要介绍“php中get和set有哪些区别”,在日常操作中,相信很多人在php中get和set有哪些区别问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”php中get和set有哪些区别”的疑惑有所帮助!...
    99+
    2023-06-29
  • Hibernate和MyBatis有哪些区别
    这篇文章主要介绍“Hibernate和MyBatis有哪些区别”,在日常操作中,相信很多人在Hibernate和MyBatis有哪些区别问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大...
    99+
    2024-04-02
  • mybatis和hibernate有哪些区别
    这篇文章主要介绍mybatis和hibernate有哪些区别,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完! mybatis是手写sql语句,存储过程,高级映射hibernate是自动生成sql语句支持存储过程和映射m...
    99+
    2023-06-03
  • 关于 Python json中load和loads区别
    目录一、相同点二、区别1.load 和 loads (反序列化)2.dump 和 dumps(序列化)三、JSON进阶1.序列化2.反序列化四、python中的序列化和反序列化1.将...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作