get()立即加载并返回对象或null,适合存在性判断;load()延迟加载返回代理,仅在访问属性时查询,适合确定存在的对象以提升性能。

在 Hibernate 中,get() 和 load() 都用于从数据库中获取实体对象,但它们的行为有重要区别,主要体现在加载时机和异常处理上。
1. 加载时机:立即加载 vs 延迟加载
get() 会立即向数据库发送查询,无论你是否访问返回对象的属性。它总是确保返回一个真实的对象或 null。
load() 默认采用延迟加载(lazy loading),不会立即查询数据库,而是返回一个代理对象(proxy)。只有当你真正访问该对象的非 ID 属性时,才会触发数据库查询。
- 使用 get():session.get(User.class, 1L) —— 立即执行 SELECT 查询
- 使用 load():session.load(User.class, 1L) —— 不查库,返回代理对象
2. 对象不存在时的处理方式
get() 在找不到对应记录时,直接返回 null,不会抛出异常。
load() 在找不到记录时,不会立即抛异常(因为是延迟加载),但当你尝试访问对象属性时,会抛出 ObjectNotFoundException。
2013年07月06日 V1.60 升级包更新方式:admin文件夹改成你后台目录名,然后补丁包里的所有文件覆盖进去。1.[新增]后台引导页加入非IE浏览器提示,后台部分功能在非IE浏览器下可能没法使用2.[改进]淘客商品管理 首页 列表页 内容页 的下拉项加入颜色来区别不同项3.[改进]后台新增/修改淘客商品,增加淘宝字样的图标和天猫字样图标改成天猫logo图标4.[改进]为统一名称,“分类”改
- get() 更安全:适合不确定记录是否存在的情况
- load() 更高效:当你确定记录存在且希望延迟加载以提升性能时使用
3. 使用场景建议
如果你只是想更新或删除某个已知存在的对象,用 load() 更高效,因为它不立即查库。
如果你需要判断对象是否存在,或者要访问其属性,应使用 get(),避免延迟加载带来的异常风险。
基本上就这些,关键看你是追求安全还是性能,以及是否确定记录存在。









