zoukankan      html  css  js  c++  java
  • Hibernate之get()和load()

    hibernate可通过get()和load()获取对象,而他们又有所不同。

    1、如果未能找到符合条件的记录,get()方法返回null(NullPointException异常),而load()将会报ObjectNotFountException

    2、load()方法返回实体的代理类,而get()永远只返回实体类

    3、load()方法可以充分利用二级缓存和内部缓存的现有数据,而get()方法只在内部缓存中进行查找,如没有发现对应数据将跳过二级缓存,直接sql查询

    上面三条算是网上的“标准”答案,因为大都这么说。

    在其他博客里看到一评论说,这三条说的都不太标准。在此也不在赘述了...只说了一条根本的区别:

    一句话,hibernate对于load方法认为该数据在数据库中一定存在,可以放心的使用代理来延迟加载,如果在使用过程中发现了问题,只能抛异常;

    而对于get方法 hibernate一定要获取到真实的数据,否则返回null.

    load()是等真正用到对象时才发sql语句,而get()直接从数据库加载 不会延迟

    通过打印*.getClass来判断是实体类还是代理类

    get()方法

    class com.itmyhome.model.Student


    load()方法

    class com.itmyhome.model.Student_$$_javassist_0


    可见load()返回的是代理类。

  • 相关阅读:
    场景设计法
    判定表驱动分析方法
    错误推测法
    Ubuntu软件包管理命令全面集锦
    MySql模糊查询
    VC++ 列表控件的使用方法
    Java笔记原生数据类型【二】
    DEDECMS 关键字不能小于2个字节!
    Linux 使用yum install安装mysql登陆不上解决办法
    PHP数据学习-二维数组【3】
  • 原文地址:https://www.cnblogs.com/itmyhome/p/4131512.html
Copyright © 2011-2022 走看看