I am trying to write this query using blaze persistence
select * from A a
left join logs l on a.id = l.a_id
where a.id in (
select a1.id from A a1
where
-- some filters
order by id desc limit 50 offset 2
)
but my code generates a request like this
select * from A a
left join logs l on a.id = l.a_id
where
1=1
and (
A.direction in (
?
)
)
and (
A.id in (
(
select
A.id
from
A a2 limit 50 offset 10
)
)
)
who can point out where my mistake is, I understand that it is necessary to specify specification and sorting for a subquery, but I do not understand where and how exactly
Pageable pageRequest = PageableFilter.builder()
.limit(limit)
.offset(offset)
.sorts(sorts)
.build()
.getPageRequest();
if (sorts.isEmpty()) {
sorts.add(new PageableFilter.Sort(DEFAULT_SORT_FIELD, PageableFilter.Direction.DESC));
}
BlazeCriteriaBuilder blazeCriteriaBuilder = BlazeCriteria.get(criteriaBuilderFactory);
BlazeCriteriaQuery<A> query = blazeCriteriaBuilder.createQuery(A.class);
Root<A> root = query.from(A.class);
query.where(ASpecification.of(userDataAccessService, filters).toPredicate(root, query, blazeCriteriaBuilder));
CriteriaBuilder<A> criteriaBuilder = query.createCriteriaBuilder(entityManager)
.leftJoinFetch("ALogs", "logs")
.where("id").in()
.from(A.class, "A1")
.select("A1.id")
.setFirstResult(offset)
.setMaxResults(limit)
.end();