using specification in subquery in blaze peristance

14 Views Asked by At

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();
0

There are 0 best solutions below