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

时间:2015-07-27 14:20:01

标签: java hibernate orm lazy-initialization proxies

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

1 个答案:

答案 0 :(得分:2)

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

LazyInitializationException是代码气味。您得到它是因为在关闭Session之前未正确初始化所有必需的实体关联。切换到EAGER关联也是bad idea,因为提取策略是查询职责。

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

至于这句话:

  

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

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

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

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

@Proxy(lazy=false)