@LazyToOne的NO_PROXY与FALSE选项有何区别?
LazyToOneOption.FALSE 与 NO_PROXY 的核心差异
加载触发时机不同
FALSE:加载主实体的同时就会同步加载关联对象,无论后续是否会用到该关联。NO_PROXY:主实体加载时不会加载关联对象,只有当你首次访问关联对象的属性或方法时,才会触发关联对象的加载。
内存中对象的存在形式不同
FALSE:关联对象从一开始就是真实的实体实例,不存在任何代理或占位结构,主实体加载完成后,关联对象就完全驻留在内存中。NO_PROXY:主实体加载后,关联对象的引用是一个轻量的占位结构(非标准Hibernate代理),只有在首次访问后才会被替换为真实的实体实例,未访问前仅占用极少内存。
数据库查询的执行时机不同
FALSE:数据库查询(主实体+关联对象)在主实体加载时一次性完成,可能是单条左连接查询,也可能是主查询后立即执行关联查询。NO_PROXY:主实体加载时仅执行主实体的查询,关联对象的查询是延迟到首次访问时才执行,查询时机取决于你首次访问关联对象的时间点。
内容的提问来源于stack exchange,提问作者Kawsar Ahmed
相关产品推荐
相关产品推荐

