package gr.cite.notification.query.utils; import jakarta.persistence.criteria.Root; import jakarta.persistence.criteria.Subquery; import org.springframework.stereotype.Component; @Component public class QueryUtilsServiceImpl implements QueryUtilsService { @Override public Subquery buildSubQuery(BuildSubQueryInput parameters){ Subquery subQuery = parameters.getQuery().subquery(parameters.getKeyType()); Root subQueryRoot = subQuery.from(parameters.getEntityType()); subQuery.select(parameters.getKeyPathFunc().apply(subQueryRoot)).distinct(true); subQuery.where(parameters.getFilterFunc().apply(subQueryRoot, parameters.getCriteriaBuilder())); return subQuery; } }