删除 Hibernate 生成的惰性初始化代理的最安全方法是什么?

Whats the safest way to remove lazy initialization proxies generated by Hibernate?

我想保留 Parent/Child 关系,但是当我解析父对象时,我不想获取子元素。

生成代理以便 Hibernate 可以拦截对未初始化关联的调用并尝试按需获取它们。

LazyInitializationException 是一种代码味道。你得到它是因为你在关闭 Session 之前没有正确初始化所有必需的实体关联。切换到 EAGER 关联也是一个 bad idea,因为获取策略是查询责任。

如果您不需要关联,请尝试减少关联的数量并改用查询。您可以构建仅具有多对一关联(镜像 FK 关系)的应用程序,而不是一对多关联,您可以使用 DAO 方法。

至于这个说法:

I would like to keep the Parent/Child relationship but when I parse through the Parent Object I don't want to fetch the child elements.

如果您保持 Parent/Child 关系,您总是需要在使用之前加载关联。尝试删除代理听起来像是您在尝试破解解决方案而不是正确设计您的应用程序层。

所以代理很好,它们可以让您提高应用程序性能,因为当您尝试访问根实体时并不总是获取所有关联。

要禁用代理,您只需使用 Proxy 注释对您的实体进行注释:

@Proxy(lazy=false)