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.