как написать столбец hstore в предложении where jpa-запроса spring data

#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')