#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 выполняется вместо переопределенной функции. Есть идеи?