【发布时间】:2015-10-17 18:58:40
【问题描述】:
我想保持父/子关系,但是当我解析父对象时,我不想获取子元素。
【问题讨论】:
标签: java hibernate orm lazy-initialization proxies
我想保持父/子关系,但是当我解析父对象时,我不想获取子元素。
【问题讨论】:
标签: java hibernate orm lazy-initialization proxies
生成代理以便 Hibernate 可以拦截对未初始化关联的调用并尝试按需获取它们。
LazyInitializationException 是一种代码味道。您得到它是因为您在关闭Session 之前没有正确初始化所有必需的实体关联。切换到 EAGER 关联也是 bad idea,因为获取策略是查询职责。
如果您不需要它们,请尝试减少关联的数量并改用查询。您可以仅使用多对一关联(镜像 FK 关系)构建应用程序,并且可以使用 DAO 方法代替一对多关联。
至于这句话:
我想保持父/子关系,但是当我解析时 通过父对象我不想获取子元素。
如果您保持父/子关系,则始终需要在使用之前加载关联。尝试删除代理听起来像是在尝试破解解决方案,而不是正确设计应用程序层。
所以代理很好,它们允许您提高应用程序性能,因为当您尝试访问根实体时并不总是获取所有关联。
要禁用代理,您只需使用 Proxy 注释来注释您的实体:
@Proxy(lazy=false)
【讨论】: