У меня есть метод следующий вызов в моем слое службы:Spring Data osdata.jpa.repository.JpaRepository Сохраним метода и полиморфизм
saveAdvertisement(childminderAdvertisement);
..which в вызовах следующих методов из AdvertisementServiceImpl
:
public void saveAdvertisement(Advertisement advertisement) {
advertisementRepository.save(advertisement);
}
AdvertisementRepository
является org.springframework.data.jpa.repository.JpaRepository
параметризованным следующим образом:
JpaRepository<Advertisement, Long>;
Вот мои объекты:
Advertisement
:
@RooJavaBean
@RooToString
@RooEquals
@RooJpaEntity(inheritanceType = "TABLE_PER_CLASS")
@Entity
public abstract class Advertisement {
...
ChildminderAdvertisement
:
@RooJavaBean
@RooToString
@RooEquals
@RooJpaEntity
@Entity
public class ChildminderAdvertisement extends Advertisement {
...
я заметил, что AdvertisementRepository
(который имеет тип-parametized с супер класс реклама) удаляет ошибки в ChildminderAdvertisement
.
Мой вопрос имеет два аспекта:
- как делает Spring Data JPA удается сохраняться экземпляр подкласса в то время как я использую JpaRepository из суперкласса?
- Каковы недостатки (если они есть) использования суперкласса в качестве параметра типа?
Спасибо за ваш ответ Андрей. Я вижу ... Тогда это просто вопрос использования 'JpaRepository', когда я манипулирую только экземплярами ChilminderAdvertisement и 'JpaRepository ' в противном случае? –
balteo
В моем примере выше, да. Но в целом это зависит от вашей проблемы: нужны ли вам специальные/дополнительные/расширенные операции/функциональные возможности в «ChildminderAdvertisement» (обычно в подтипе). Как я понимаю из вашего дела в вопросе, ваш 'JpaRepository' просто идеален, чтобы оставаться таким и использоваться также для «ChildminderAdvertisement». –
Спасибо, Андрей! – balteo