博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据库返回Hibernate中的get和load有何不同?
阅读量:5834 次
发布时间:2019-06-18

本文共 1106 字,大约阅读时间需要 3 分钟。

发一下牢骚和主题无关:

    http://javarevisited.blogspot.tw/2012/07/hibernate-get-and-load-difference-interview-question.html

    

    

最大的差别:检索策略不同

    get:

     如果Session缓存中没有相关对象 ,get会立即拜访数据库;返回一个被完整初始化的对象;可能触及多次数据库调用。

    ——session.get()、query.list()总是会停止立即检索,即便已设为应用延迟检索。

    

    load:

    如果Session缓存中没有相关对象,load其实不立即查询数据库,不执行select,仅返回BO的一个代理类实例

    

  • 这个代理类扩展自BO类,由Hibernate在运行时应用CGLIB工具动态产生;
  • 代理类实例仅初始化OID属性,其他属性都是null
  • 第一次拜访BO属性(非ID属性)时,Hibernate会执行select+初始化代理类实例
    每日一道理
漫漫人生路,谁都难免会遭遇各种失意或厄运。在凄风苦雨 惨雾愁云的考验面前,一个强者,是不会向命运低头的。风再冷,不会永远不息;雾再浓,不会经久不散。风息雾散,仍是阳光灿烂。

    ——若select查不到,则抛ObjectNotFoundException

    ——getId()其实不能触发查询。

    这种延迟初始化可以节省数据库查询,进步性能。

    

    

当对象找不到时的行为不同

    如果在缓存和数据库中都找不到对象,则:

    get返回null;

    load抛出ObjectNotFoundException。

    

    

拜访数据库

    get总是拜访数据库;

    load其实不总是拜访数据库。——getId不拜访

    

    

代理

    get要么返回null,要么返回一个完整初始化的对象;

    load返回proxy。

    

    

性能

    load性能更高。

    

    

应用场景

    当想判断实例是否存在时,用get;——因为不存在的话,就会返回null

    当确信实例确定存在时,用load

    

    如果只需拜访对象ID,用load

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

文章结束给大家分享下程序员的一些笑话语录: 据说有一位软件工程师,一位硬件工程师和一位项目经理同坐车参加研讨会。不幸在从盘山公路下山时坏在半路上了。于是两位工程师和一位经理就如何修车的问题展开了讨论。

硬件工程师说:“我可以用随身携带的瑞士军刀把车坏的部分拆下来,找出原因,排除故障。”
项目经理说:“根据经营管理学,应该召开会议,根据问题现状写出需求报告,制订计划,编写日程安排,逐步逼近,alpha测试,beta1测试和beta2测试解决问题。”
软件工程说:“咱们还是应该把车推回山顶再开下来,看看问题是否重复发生。”

转载地址:http://agkcx.baihongyu.com/

你可能感兴趣的文章
java中回调函数以及关于包装类的Demo
查看>>
maven异常:missing artifact jdk.tools:jar:1.6
查看>>
终端安全求生指南(五)-——日志管理
查看>>
Nginx 使用 openssl 的自签名证书
查看>>
创业维艰、守成不易
查看>>
PHP环境安装套件:快速安装LAMP环境
查看>>
CSS3
查看>>
ul下的li浮动,如何是ul有li的高度
查看>>
C++ primer plus
查看>>
python mysqlDB
查看>>
UVALive 3942 Remember the Word Tire+DP
查看>>
从微软的DBML文件中我们能学到什么(它告诉了我们什么是微软的重中之重)~目录...
查看>>
被需求搞的一塌糊涂,怎么办?
查看>>
c_数据结构_队的实现
查看>>
jquery 选择器总结
查看>>
Qt设置背景图片
查看>>
【阿里云文档】常用文档整理
查看>>
java中的Volatile关键字
查看>>
前端自定义图标
查看>>
实验二
查看>>