(Spring / JpaRepository) Наследование методов JpaRepository от BaseEntityRepository к SubEntityRepository - PullRequest
1 голос
/ 25 апреля 2020

Что было бы лучше для следующего случая?

У вас есть следующие объекты:

@Entity public class BaseEntity { }
@Entity public class SubEntity extends BaseEntity { }

И у вас есть JpaRepository для BaseEntity с несколькими методами выбора:

public interface BaseEntityRepository extends JpaRepository<BaseEntity, Long> {
  Set<BaseEntity> findAll();
  Set<BaseEntity> findSome...();
}

Теперь вам нужен JpaRepository для SubEntity, наследующий все методы от BaseEntityRepository.

Теперь я представляю несколько сценариев ios, из которых я не уверен, какой из них лучший или какие должно работать:

(a) Создать новый независимый JpaRepository для SubEntity с точно такими же методами, но заменив BaseEntity на SubEntity:

public interface SubEntityRepository extends JpaRepository<SubEntity, Long> {
  Set<SubEntity> findAll();
  Set<SubEntity> findSome...();
}

(b) Расширяя BaseEntityRepository, все методы должны быть наследуется, но все равно возвращает BaseEntity-объекты вместо SubEntity-объектов

public interface SubEntity extends BaseEntityRepository {
}

Мне не очень нравится ни одно из обоих решений. Как бы вы решили это?

Каким-то образом я думаю, что JpaRepository не подходит для этого варианта использования?

1 Ответ

1 голос
/ 25 апреля 2020

Вы можете параметризовать ваш BaseEntityRepository и работать с этими параметрами.

public interface BaseEntityRepository<T, I> extends JpaRepository<T, I> {
  Set<T> findAll();
  Set<T> findSome...();
}

Затем добавьте любые дополнительные методы в подкласс, расширив BaseEntityRepository

public interface SubEntityRepository extends BaseEntityRepository<SubEntity, Long> {
  ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...