将QuerydslBinderCustomizer与Kotlin Spring Data一起使用时发生IllegalArgumentException

时间:2018-09-16 03:23:35

标签: spring kotlin spring-data-jpa spring-data querydsl

我一直在使用Spring Data的querydsl支持,以便对我的域实体进行过滤。 但是,当我尝试在存储库中覆盖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注释,希望将其忽略无济于事。

此问题是否有解决方法?

更新

我还没有设法在Kotlin上做到这一点。我最终(勉强地)将存储库类转换为Java,从而解决了该问题。

更新

此问题的解决方案是在custom方法上使用@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)
    }
}

0 个答案:

没有答案