package eu.eudat.queryable; import eu.eudat.entities.DataEntity; import eu.eudat.queryable.predicates.OrderByPredicate; import eu.eudat.queryable.predicates.SelectPredicate; import eu.eudat.queryable.predicates.SinglePredicate; import javax.persistence.criteria.Subquery; import java.util.List; import java.util.Set; import java.util.concurrent.CompletableFuture; public interface QueryableList> { QueryableList where(SinglePredicate predicate); List select(SelectPredicate predicate); List toList(); CompletableFuture> toListAsync(); T getSingle(); CompletableFuture getSingleAsync(); T getSingleOrDefault(); CompletableFuture getSingleOrDefaultAsync(); QueryableList skip(Integer offset); QueryableList take(Integer length); QueryableList distinct(); QueryableList orderBy(OrderByPredicate predicate); QueryableList setHints(Set hints); QueryableList withHint(String hint); Long count(); CompletableFuture countAsync(); Subquery subQuery(SinglePredicate predicate,List fields); }