我有一种情况,我想使用EclipsLink JPA创建一个实体的查询,我需要来自这个实体的5个字段,它有很多。其中2个字段加入了OneToMany关系。我只需要来自每个连接的2个原始字段。
最有效的方法是什么?
我已经考虑了很多可能性,基于我读过的内容,批量阅读似乎是最好的选择,但是我相信这只有在我检索完整实体时才有效,即SELECT a FROM Entity a ...以及原因我不想这样做是因为我有LOB和BLOB类型会危险地进入内存。
Join-fetch是另一个,但实体有~10个连接表,我不想复制所有这些数据。
我一直在使用获取组(http://wiki.eclipse.org/EclipseLink/Examples/JPA/AttributeGroup)并指定我想要的字段,这会导致缓存的延迟加载。这是可行的,内存占用更好。问题是,当我执行entity.getCollection()时,它必须为每个调用执行一个SQL语句,这是我认为效率低下的地方。如果我可以使用某种形式的批处理或连接提取来从实体A中选择a.Field,a.Field2,或者更好地将其应用于我的提取组,这将是我想象的最好但不确定我是否可以确保它会没有加载所有相关的表,只给我我想要的。
非常感谢帮助/想法。
答案 0 :(得分:1)
我认为批量提取也适用于嵌套的提取组,你试过这个吗?
您还可以在FetchGroupManager上设置defaultFetchGroup(直接或通过将fetch = LAZY添加到您的fetch组中不需要的字段,即将fetch = LAZY添加到LOB字段中)。