在休眠时使用延迟加载时需要的关系

问题描述:

我有一个项目,其中所有模型关系(1:m或1:1)提取类型定义为lazy。 现在考虑我有一个叫做M的模型,它有三个关系a,b和c,都是1:m。 现在我有三个服务:服务 -A 服务B 服务-C在休眠时使用延迟加载时需要的关系

如果服务A回归模型M那么它的关系,必须填充尽管其它B,C中含有的代理模式。 如果Service-B返回模型M,则其关系b必须填充,尽管其他a,c包含代理模型。 与Service-C相同

任何人都可以知道如何做到这一点?

这里的另一种情况是,如果只有一个Service和用户提供参数来加载关系a或b或c,那么该如何实现?

+1

你可以看看使用JPA 2.1中引入的实体图功能(我认为休眠版本4.3+)。请参阅此处了解更多信息。 http://www.thoughts-on-java.org/jpa-21-entity-graph-part-1-named-entity/ –

+0

良好的解决方案,谢谢你的答案,我在等待。 –

简单的方法就是来填充他们的内部事务:

在ServiceA

entity.getCollectionB().size()

在ServiceB entity.getCollectionC().size()

查看其他: http://www.thoughts-on-java.org/5-ways-to-initialize-lazy-relations-and-when-to-use-them/

编辑:一延迟加载到一个关系也不会与实体图形一起工作。无论有没有它,你都需要字节码工具。优化列读取并不像优化行读取那么重要。见:http://www.thoughts-on-java.org/jpa-21-entity-graph-part-1-named-entity/#comment-219

+0

大小将不会在一对一的关系... –

+0

艾伦干草给了我最好的解决方案。 –

+0

这也造成了[n + 1] hibernate问题。 –