public static final class EntityA {
@Id
Long id;
@ManyToMany(fetch = FetchType.EAGER, cascade = {CascadeType.ALL})
Set<EntityB> set = new HashSet<>();
}
public static final class EntityB {
@Id
Long id;
String name;
}
但是,当我使用hibernate标准查询EntityA时,执行criteria.setMaxResults( 1 );
设置仅返回一个元组,即使它包含更多元组。
当我忽略setMaxResults(1)
时,我确实得到了集合中的所有内容以及我的EntityA实例。
此外,当我使用@Fetch(FetchMode.SELECT)
时,尽管有setMaxResults(1),但我确实得到了所有内容。
此外,当我使用setFetchSize(1)
时,如果不是setMaxResults(1)
,它也会返回全部,但我相信应该使用setMaxResutls来限制EntityA上的返回列表。
这是一个错误吗?
SUBSELECT不如JOIN高效,为什么我想了解为什么会这样。
标准正在EntityA上使用,最大结果就是在那里。
答案 0 :(得分:0)
setMaxResults
限制行数,而不是您想要获得的实体实例数量(请参阅section Pagination)。
默认情况下,EntityA的设置基于您发布的实体模型,使用 join 与entityA实例一起提取。因此,将MaxResults设置为1限制只检索一行,这意味着实例实体A和关联的实体。
使用FetchMode.SELECT
,集将由与检索entityA的查询不同的select查询检索。
我建议您查看this以及有关Hibernate手册performance的部分,了解您拥有的选项以及获取策略的功能(同时here是 - 示例解释)