Skip to content

Combining Predicates

These and/or combine raw Predicates, taking the criteriaBuilder as their first argument followed by a vararg of Predicates. Reach for them inside any lambda that already gives you a CriteriaBuilder and builds raw Predicates directly, such as a Specification or PredicateSpecification.

and

val activeAdults =
    Specification<User> { root, _, criteriaBuilder ->
        val isActive = User::isActive.isTrue(root, criteriaBuilder)
        val isAdult = User::age.greaterThanOrEqualTo(root, criteriaBuilder, 18)

        and(criteriaBuilder, isActive, isAdult)
    }

or

val priorityUsers =
    PredicateSpecification<User> { root, criteriaBuilder ->
        val isAdmin = User::role.equal(root, criteriaBuilder, "ADMIN")
        val isModerator = User::role.equal(root, criteriaBuilder, "MODERATOR")
        val isPremium = User::isPremium.isTrue(root, criteriaBuilder)

        or(criteriaBuilder, isAdmin, isModerator, isPremium)
    }