HQL запрос по внешнему ключу

Имеется две таблицы PersonEntity и CityEntity. PersonEntity в БД связана с CityEntity внешним ключем fk_cityid. Мне необходимо выбрать все записи (имена) таблицы PersonEntity с заданным cityId. Везде для этого используют join, но в данном случае мне не нужны данные из таблицы CityEntity, только поле name таблицы PersonEntity. Вот описание классов:

@Entity
public class PersonEntity {
    private Long id;
    private String name;
    private CityEntity cityId;
}
@Entity
public class CityEntity {
    private Long id;
    private String name;
}

Вот HQL запрос:

@Repository
public interface PersonEntityRepository extends JpaRepository<PersonEntity, Long> {
  @Query("select p.name FROM PersonEntity p where (p.name = :name or :name is null) " +
        "and (p.cityId = :cityId or :cityId is null)")
    List<PersonEntity> findByNameAndCity (
        @Param("name") String name,
        @Param("cityId") CityEntity cityId);
}

пробовал по id:

 @Query("select p.name FROM PersonEntity p where (p.name = :name or :name is null) " +
        "and (p.cityId.id = :cityId or :cityId is null)")
    List<PersonEntity> findByNameAndCity (
        @Param("name") String name,
        @Param("cityId") Long cityId);

В обоих случаях ошибка: не удалось определить тип данных.


Ответы (1 шт):

Автор решения: Евгений Булатов

Как вариант, в запросе запрашивается всего одно поле name, а на выходе надо получить список Person.

Или получай список String, или запрашивай p.

→ Ссылка