(Spring / JpaRepository) Dynami c @Query, при наследовании методов JpaRepository из BaseEntityRepository в SubEntityRepository - PullRequest
0 голосов
/ 01 мая 2020

(Этот пост продолжает обсуждение, все важные части повторяются здесь: (Spring / JpaRepository) Наследование методов JpaRepository от BaseEntityRepository к SubEntityRepository )

Предположим, у нас есть следующие сущности:

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

и следующие реализации JpaRepository:

public interface BaseEntityRepository<T, I> extends JpaRepository<TableWithId, Long> {

    @Query("SELECT t FROM BaseEntity t WHERE id = :id")
    Optional<T> getById(@Param("id") Long id);

    @Query("SELECT t FROM BaseEntity t WHERE customField = :customField")
    List<T> findByCustomField(@Param("customField") String customField);
}

Теперь для SubEntity у меня есть еще один репозиторий:

public interface SubEntityRepository extends BaseEntityRepository<SubEntity, Long> {}

Будет ли JPA знать, что в @Query «BaseEntity» нужно заменить на «SubEntity» и почему? Если «нет», как лучше всего делать то, что я хочу?

1 Ответ

2 голосов
/ 01 мая 2020

Вам нужно использовать SPEL

@Query("SELECT T FROM #{#entityName} T WHERE T.id = :id")
Optional<T> getById(@Param("id") Long id);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...