Я использовал поддержку querydsl в Spring Data для фильтрации объектов моего домена.
Однако, когда я пытаюсь переопределить метод настройки QuerydslBinderCustomizer в моем хранилище, я получаю исключение IllegalArgumentException следующим образом:
Ошибка вызова метода init; вложенное исключение - java.lang.IllegalArgumentException: не удалось создать запрос для метода public abstract void com.my.project.repository.TripRepository.customize (org.springframework.data.querydsl.binding.QuerydslBindings, com.my.project.domain. trip.QTrip)! Не найдено настроек для типа Trip!
Мой репозиторий определяется следующим образом:
@Repository
interface TripRepository : PagingAndSortingRepository<Trip, Long>, QuerydslPredicateExecutor<Trip>, QuerydslBinderCustomizer<QTrip> {
fun findByState(tripState: TripState): List<Trip>
override fun customize(bindings: QuerydslBindings, root: QTrip) {
bindings.excluding(root.anonymousToken)
}
}
Кажется, что PagingAndSortingRepository ищет поле настройки в моей сущности Trip, несмотря на то, что это переопределение метода из другого интерфейса. Я попытался добавить пустую аннотацию @Query к методу настройки, надеясь, что он будет проигнорирован безрезультатно.
Есть ли обходной путь для этой проблемы?
Обновление
Мне не удалось заставить это работать в Котлине. Я закончил (неохотно) преобразование классов репозитория в Java, что решило проблему.
Обновление
Решением этой проблемы является использование аннотации @JvmDefault в методе настройки.
@Repository
interface TripRepository : PagingAndSortingRepository<Trip, Long>, QuerydslPredicateExecutor<Trip>, QuerydslBinderCustomizer<QTrip> {
fun findByState(tripState: TripState): List<Trip>
@JvmDefault
override fun customize(bindings: QuerydslBindings, root: QTrip) {
bindings.excluding(root.anonymousToken)
}
}