Hibernate 休眠批处理抓取到延迟加载
目前,我在hbernate3中观察到以下行为。 如果我有 @批量大小(大小=5) 设置,则hibernate将在一个SQL查询中获取映射类型的5个子集 如果我有 .setFetchMode(“set”,FetchMode.JOIN); ,然后hibernate将在单个SQL查询中急切地获取映射类型的所有子集 然而,当我设置 .setFetchMode(“命令”,FetchMode.SELECT); ,那么hibernate仍然使用批处理抓取,而不是惰性抓取 有没有办法强迫hibernate在 @批量大小 设定好了吗 同样的问题也适用于何时 @Fetch(FetchMode.SUBSELECT)Hibernate 休眠批处理抓取到延迟加载,hibernate,lazy-loading,Hibernate,Lazy Loading,目前,我在hbernate3中观察到以下行为。 如果我有 @批量大小(大小=5) 设置,则hibernate将在一个SQL查询中获取映射类型的5个子集 如果我有 .setFetchMode(“set”,FetchMode.JOIN); ,然后hibernate将在单个SQL查询中急切地获取映射类型的所有子集 然而,当我设置 .setFetchMode(“命令”,FetchMode.SELECT); ,那么hibernate仍然使用批处理抓取,而不是惰性抓取 有没有办法强迫hibernate在 @
已设置。抱歉,但是@BatchSize用于解决“N+1问题”,而不是要求Hibernate急切或懒惰地加载实体。尝试用关键字搜索:“Hibernate,N+1问题,批量大小”。< P>如果你想以编程方式重写这些设置,你可以考虑使用@ FETCHPrror。 只需为实体创建@FetchProfile:
@FetchProfiles({
@FetchProfile(name = "profileName", fetchOverrides = {
@FetchProfile.FetchOverride(entity = YourEntity.class,
association = "anAssociation",
mode = FetchMode.JOIN),
...
})
})
@FetchProfiles({
@FetchProfile(name=“profileName”,fetchOverrides={
@FetchProfile.FetchOverride(entity=YourEntity.class,
association=“anasociation”,
mode=FetchMode.JOIN),
…
})
})
并在服务/存储库方法中启用该配置文件,如:
session.enableFetchProfile(“profileName”);
您的自定义提取设置将适用于该会话。我知道它有助于解决N+1问题。但是,它会覆盖急切/懒惰设置。我的问题是,这些设置是否可能共存并通过编程进行设置。这听起来像是我在寻找的。我可以在单个会话中的两个事务之间启用/禁用此配置文件吗?@iliaden是的,您可以在同一会话中使用会话#disableFetchProfile(profileName)禁用此配置文件。您还可以使用Session#isFetchProfileEnabled(profileName)来确定是否启用或禁用了提取配置文件。
session.enableFetchProfile( "profileName" );