Как записать столбец hstore, где предложение весенних данных jpa-запроса - PullRequest
0 голосов
/ 08 марта 2019

Я сталкиваюсь с проблемой при написании столбца типа "hstore", в котором предложение jpa запроса данных Spring.

@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, он работает довольно хорошо, но весной запрос данных jpa не работает и выдает ошибку как неверный идентификатор.

Может кто-нибудь помочь мнена этом.

1 Ответ

0 голосов
/ 10 марта 2019

Если JPA не нравится оператор "->", вы можете попробовать функциональные формы

fetchval(ad.attr,'CorrelationId') IS NOT NULL

или

defined(ad.attr,'CorrelationId')
...