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)
}