Проблемы наследования репозитория Kotlin Spring при попытке переопределить функцию

#kotlin #spring-data-jpa #spring-data #spring-data-solr

#kotlin #spring-data-jpa #spring-данные #spring-data-solr

Вопрос:

Я постараюсь упростить для большей ясности. Это мои Entities.kt, где у меня всего два класса, A и B. B расширяет A

 @SolrDocument(solrCoreName = "core")
open class A(
    @Id
    @Indexed(name="id", type = "string_or")
    var id: String = "",

    @Indexed(name="type", type = "string"
    var type: String = ""
)
open class B(
  @Indexed(name="b_field", type= "string")
  var bField: String = ""
) : A()
 

В моих репозиториях.kt я попытался воспроизвести эту модель наследования, а затем я пытаюсь переопределить функцию findAll репозитория B, чтобы возвращались только те объекты типа B, например:

 interface BaseRepository<T: A>: SolrCrudRepository<T, String> {
    fun findByType(type: String): List<T>
}

interface ARepository: BaseRepository<A> {

}

interface BRepository: BaseRepository<B> {
   @Query("type:B")
   override fun findAll(): List<B>
}
 

Однако при вызове findAll из контроллера я все равно получаю все объекты (независимо от типа A или B), это мой код в контроллере:

 @RestController
@RequestMapping("/api/B")
class BController(private val repository: BRepository) {

  @GetMapping("")
  fun findAll() = repository.findAll()
}
 

Я также пытался сделать аналогичную вещь, используя только JPA вместо Solr, но у меня та же проблема, родительская (по умолчанию) функция findAll выполняется вместо переопределенной функции. Есть идеи?