【发布时间】:2011-08-10 18:09:51
【问题描述】:
我正在尝试减少我的应用程序产生的 n+1 选择的数量,该应用程序使用 EclipseLink 作为 ORM,并且在尽可能多的地方我尝试将批量读取提示添加到查询中。在应用程序的许多地方,我并不总是确切地知道我将要遍历哪些关系(我的视图根据用户偏好显示字段)。那时我想运行一个查询来填充我的对象的所有这些关系。
我的梦想是调用类似 ReadAllRelationshipsQuery(Collection,RelationshipName) 并填充所有这些项目,以便以后调用:
Collection.get(0).getMyStuff 已经被填充并且不会导致数据库查询。我怎样才能做到这一点?我愿意编写任何我需要的代码,但我找不到与 eclipselink 框架配合使用的方法?
我为什么不批量读取所有可能的字段并让它们延迟加载?我发现实现批量读取的批量值持有者在 eclipselink 缓存中表现不佳。如果批量读取值持有者未“评估”并最终进入 eclipse 链接缓存,则它可能会变得陈旧并返回不正确的数据(此行为被记录为 eclipselink 错误但被拒绝...) 编辑:我在这里找到了该错误的链接:https://bugs.eclipse.org/bugs/show_bug.cgi?id=326197
如何避免对我已经引用的对象进行 N+1 次选择?
【问题讨论】:
标签: java orm eclipselink