Я пытаюсь использовать JpaRepositories как одну стратегию в шаблоне стратегии. В будущем я хочу легко переключаться между локальными / тестирующими репозиториями (JPA) и соединениями с базами данных live / prod (OData). Чтобы добиться этого, я создал интерфейс БД для каждой сущности, такой как:
interface EventAppointmentDBInterface {
fun save(eventAppointment: EventAppointment): EventAppointment
fun saveAll(eventAppointments: List<EventAppointment>): List<EventAppointment>
fun count(): Long
fun getOne(appointmentId: Long): EventAppointment
...
}
Контекст, в котором он используется:
@Service
class EventAppointmentDB(repositoryManager: RepositoryManager) {
var strategy: EventAppointmentDBInterface? = null
init {
repositoryManager.initEventAppointmentDB(this)
}
fun save(eventAppointment: EventAppointment): EventAppointment {
return strategy!!.save(eventAppointment)
}
fun saveAll(eventAppointments: List<EventAppointment>): List<EventAppointment> {
return strategy!!.saveAll(eventAppointments)
}
...
}
и один из «реализованных» (все еще Стратегия Интерфейса): JpaRepository
interface EventAppointmentRepository : JpaRepository<EventAppointment, Long>, EventAppointmentDBInterface {...}
раньше она работала просто отлично, пока я не добавил метод saveAll
в EventAppointmentDBInterface
. Теперь выдает следующую ошибку:
org.springframework.data.mapping.PropertyReferenceException: No property saveAll found for type EventAppointment!
Может кто-нибудь указать на мою ошибку? Насколько я посмотрел, List
реализует Iterable
, поэтому не должно быть никаких ошибок типов относительно заголовков методов, не так ли? JPA saveAll имеет следующую (Java) подпись:
<S extends T> List<S> saveAll(Iterable<S> entities)