У меня есть этот репозиторий миссии:
@Repository
interface MissionRepository: CrudRepository<MissionEntity, String>, JpaSpecificationExecutor<MissionEntity>
В моем классе обслуживания миссий я хотел бы получить все миссии, у которых есть countryId
части данного аргумента Set
:
fun findAllByCountryIdIn(countryIds: Set<String>): List<MissionEntity> =
missionRepository.findAll(where(countryIdIn(countryIds)))
}
Откуда countryIdIn
(используя предикат in
):
class MissionSpecifications {
companion object {
fun countryIdIn(countryIds: Set<String>): Specification<MissionEntity> =
Specification { root, _, _ -> root.get<String>("countryId").`in`(countryIds) }
}
}
Но когда Set
пуст, я получил предсказуемую ошибку sql. Есть ли способ активировать предложение where только тогда, когда данный набор не пуст? Без проверки if / else? Может быть, мой синтаксис спецификации может быть улучшен, чтобы избежать этой ошибки sql?