You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Hibernate是否会根据前置查询决定集合中创建代理还是加载实体?

Hibernate代理对象复用的特性说明

这确实是Hibernate的特性,根源在于它的Session一级缓存和延迟加载代理机制:

  • 当你先遍历bs集合,访问每个B的c属性时,Hibernate会为对应的C类对象创建延迟加载代理,并把这个代理存入当前Session的缓存中。
  • 后续遍历cs集合时,Hibernate会先检查Session缓存,发现对应数据库记录的代理已经存在,就直接返回这个代理对象,不会再去数据库加载真实实例。
  • 如果直接遍历cs,此时缓存中没有对应C类的代理或实例,Hibernate会直接加载真实的C实例并加入缓存。

代码示例

class A {
  Set<B> bs;
  Set<C> cs;
}

class B {
  C c;
}

class C {
  // 类成员定义
}

内容的提问来源于stack exchange,提问作者otocon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 14:30:59