我有Spring Jpa的QueryDsl查询,写成:
JPAQuery<FooEntity> query = getQuerydsl()
.<FooEntity>createQuery()
.from(foo)
.leftJoin(foo.bar, bar).fetchJoin()
.leftJoin(...).fetchJoin()
.where(predicate)
.distinct();
return new PageImpl<>(getQuerydsl().applyPagination(pageable, query).fetch(), pageable,
query.fetchCount());
使用 FetchJoin是因为需要来自联接表的数据。奇怪的是,其中一些查询的正确SQL以limit ?,?
结尾。这意味着分页应用于数据库内部。
但是,如果映射是通过@OneToMany(mappedBy = "...")
而不是@JoinColumn()
完成的,那么所有数据都会加载到内存中,并且我会看到警告:
HHH000104: firstResult/maxResults specified with collection fetch; applying in memory!
在这种情况下如何避免将所有数据加载到内存中?