IllegalArgumentException при использовании QuerydslBinderCustomizer с данными Kotlin Spring - PullRequest
0 голосов
/ 16 сентября 2018

Я использовал поддержку 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)
    }
}
...