【发布时间】:2011-04-07 11:59:18
【问题描述】:
我有一个包含地址列表的人员对象,并且在映射中它被注释为急切地获取。
我有一个条件生成器查询,假设我想获取一个人对象但不获取地址。我如何单独禁用标准查询中的渴望 feting。有什么方法吗?
实际的代码并没有这么简单……这只是给你一个例子。
提前致谢
【问题讨论】:
标签: jpa
我有一个包含地址列表的人员对象,并且在映射中它被注释为急切地获取。
我有一个条件生成器查询,假设我想获取一个人对象但不获取地址。我如何单独禁用标准查询中的渴望 feting。有什么方法吗?
实际的代码并没有这么简单……这只是给你一个例子。
提前致谢
【问题讨论】:
标签: jpa
通常最好在映射中使用 LAZY 提取,然后在需要时使用 JPQL“join fetch”选项急切地提取它。
在 JPA 中,您可以只从实体中选择您想要的数据,而不是整个实体,然后您可以避免关系。您还可以使用构造函数查询来创建 shell 实例(注意这些实例不会被管理)。
在查询中使急切关系变得惰性的一种方法是使用提取组。 JPA 不支持获取组,但一些 JPA 提供程序(例如 EclipseLink)支持。在 EclipseLink 中,您可以使用 @FetchGroup 注释或查询提示定义提取组。
【讨论】:
我认为这是可能的。来自OpenJPA documentation:
您可以使用第 9.1.1 节“子类获取模式”中描述的元数据扩展为单个类指定默认子类获取模式。但是请注意,您不能使用您的类设置“升级”运行时获取模式。如果运行时获取模式为无,则无论您的元数据设置如何,都不会进行急切的子类数据获取。
这也适用于 Eager fetch 模式元数据扩展(请参阅第 9.2.1 节,“Eager Fetch 模式”)。您可以使用此扩展来禁用对字段的预取或声明集合宁愿使用连接而不是并行选择,反之亦然
第 9.2.1 节 here.
【讨论】: