2

我有一种情况,我想使用 EclipsLink JPA 针对一个实体创建一个查询,我需要该实体的 5 个字段,其中有很多字段。其中 2 个字段加入了 OneToMany 关系。我只需要来自每个连接的 2 个原始字段。

最有效的方法是什么?

我已经考虑了很多可能性,根据我所阅读的内容,批量阅读似乎是最好的选择,但是我相信这只有在我检索完整实体时才有效,即从实体中选择一个...以及我不这样做的原因想要这样做是我有 LOB 和 BLOB 类型,它们会危险地吞噬内存。

Join-fetch 是另一个,但实体有大约 10 个连接表,我不想复制所有这些数据。

我一直在使用获取组(http://wiki.eclipse.org/EclipseLink/Examples/JPA/AttributeGroup)并指定我想要的导致缓存延迟加载的字段。这是可行的,并且内存占用更好。问题是,当我执行 entity.getCollection() 时,它必须为每个调用执行一个 SQL 语句,这就是我觉得它效率低下的地方。如果我可以使用某种形式的批处理或连接提取或更好地从实体 A 执行 SELECT a.Field, a.Field2 或更好地将其应用于我的提取组,这将是我想象的最好但不确定我是否可以确保它会不加载所有相关的表,只给我我想要的。

帮助/想法将不胜感激。

4

1 回答 1

1

我认为批量提取也适用于嵌套提取组,你尝试过吗?

您还可以在您的 FetchGroupManager 上设置一个 defaultFetchGroup(直接或通过将 fetch=LAZY 添加到您不希望在您的提取组中的字段,即添加 fetch=LAZY 到您的 LOB 字段)。

于 2013-06-04T14:28:34.893 回答