Боюсь, что нет. Если бы вы уже попробовали, вы бы заметили, что ваш второй репозиторий extending CrudRepository<T, Long>
не работает с чем-то вроде:
Ошибка вызова метода init; вложенным исключением является java.lang.IllegalArgumentException: не управляемый тип: класс java.lang.Object.
потому что с помощью общего T
java может только сказать, что это Object
, который не является сущностью. И из-за этого вам нужно добавить аннотацию @NoRepositoryBean
, которая затем позволяет расширять ее только реальным типом сущности вместо общего T
.
Это может быть возможно программно, но, скорее всего, будет гораздо сложнее, чем просто создавать интерфейсы репо.
Если у вас есть дерево наследования сущностей, такое как A->B->C
, вы можете создать репо для A
, который затем обрабатывает также B
& C
, что относится к свойствам, унаследованным от A
. Таким образом, вы можете выдать findAll()
, и он вернет вам все A
s, B
s & C
s, но в виде списка A
s, и вам придется проверять фактический тип каждого элемента отдельно.
Обычно, когда нет необходимости в каком-либо особом подходе к сущностям, и вы не хотите писать эти заглушки репозитория, вы можете просто использовать EntityManager
напрямую. Вы можете реализовать свой собственный - общий репозиторий, например - @Service
класс, который имеет @Autowired
менеджер сущностей и вызывать его find(..)
, persist(..)
и другие методы.