jpa criteriabuilder query禁用eager fetching

时间:2011-04-07 11:59:18

标签: jpa

我有一个人物对象,它有一个地址列表,在映射中,它被注释为急切地获取。

我有一个标准构建者查询,其中,我想要获取一个人物对象,但没有获取地址。我如何单独禁用标准查询中的热切信息。有方法吗?

实际代码不是这么简单......这只是给你一个例子。

提前致谢

2 个答案:

答案 0 :(得分:3)

通常最好在映射中使用LAZY获取,然后在需要时使用JPQL“join fetch”选项急切地获取它。

在JPA中,您只需从实体中选择所需的数据,而不是整个实体,然后就可以避免这些关系。您还可以使用构造函数查询来创建shell实例(请注意,这些实例不会被管理)。

在查询中使用懒惰关系的方法是使用获取组。 JPA不支持获取组,但是一些JPA提供程序(如EclipseLink)支持。在EclipseLink中,您可以使用@FetchGroup批注或查询提示来定义提取组。

答案 1 :(得分:0)

我认为这是可能的。来自OpenJPA documentation

您可以为第9.1.1节“子类提取模式”中所述的元数据扩展指定单个类的默认子类提取模式。但请注意,您无法使用类设置“升级”运行时提取模式。如果运行时获取模式为none,则无论您的元数据设置如何,都不会进行急切的子类数据提取。
这也适用于急切获取模式元数据扩展(请参见第9.2.1节“Eager Fetch模式”)。您可以使用此扩展来禁用对字段的热切提取或声明集合宁可使用连接而不是并行选择,反之亦然

第9.2.1节here