#postgresql #postgresql-9.6 #where #hibernate #hstore
#postgresql #postgresql-9.6 #where-предложение #переход в спящий режим #hstore
Вопрос:
Я столкнулся с проблемой при написании столбца типа «hstore» в предложении where запроса spring data jpa.
@Transactional(readOnly = true)
@Query(
value = "select ld from LocationData ld inner join fetch ld.assetData ad where ld.assetId in (:assetIds) and ld.orgId = :orgId and ld.eventTimestamp between :startDate and :endDate and ad.source in (:source) and
ad.attr -> 'CorrelationId' is not null",
countQuery = "select count(ld) from LocationData ld inner join ld.assetData ad where ld.assetId in (:assetIds) and ld.orgId = :orgId and ld.eventTimestamp between :startDate and :endDate and ad.source in (:source) and ad.attr -> 'CorrelationId' is not null""
)
Page<LocationData> findByAssetIdInAndOrgIdAndEventTimestampBetween(@Param("assetIds") List<Long> assetIds,
@Param("orgId") Integer orgId,
@Param("startDate") Long startEventTimestamp,
@Param("endDate") Long endEventTimeStamp,
@Param("source") List<String> source,
Pageable pageable);
В приведенном выше запросе «attr» — это столбец типа hstore. У меня есть ключ по имени CorrelationId в столбце attr. Я хочу выбрать те, где ключ CorrelationId не равен нулю. Я попытался с помощью «ad.attr -> ‘CorrelationId’ не равен нулю» в pgAdmin, он работает довольно нормально, но в запросе spring data jpa он не работает и выдает ошибку как недопустимый идентификатор.
Кто-нибудь может мне помочь в этом.
Комментарии:
1. ПЕРВОЕ — забудьте о Spring, Hibernate, Java или (
insert_your_cool_development_environment_here
). Используйтеpsql
CLI (или инструмент GUI по вашему выбору) для запуска необработанного запроса — затем поместите это в свою IDE / Framework! Если запрос работает вpsql
, но не в spring, то это проблема IDE. Если нет, верните запрос обратно в dba.stackexchange, без кода Java! Голосование за закрытие до добавления новой информации!
Ответ №1:
Если JPA не нравится оператор «->», вы можете попробовать функциональные формы
fetchval(ad.attr,'CorrelationId') IS NOT NULL
или
defined(ad.attr,'CorrelationId')