Собственный запрос Spring boot для операторов PostgresQL Json/FunctionJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Собственный запрос Spring boot для операторов PostgresQL Json/Function

Сообщение Anonymous »

У нас есть устаревший столбец базы данных типов jsonb, который может хранить как массив, так и json. Например.

Код: Выделить всё

items
-------
["elem1","elem2"]

["elem3","elem4"]

{"elem31": ["src1", "src2", "src3"], "elem100": ["src5"]}

{"elem21": ["src1", "src2"]}
Теперь для поиска конкретной строки, содержащей какой-либо элемент, я использую этот запрос:

Код: Выделить всё

select * from tbl1 where item ? 'elem21' // if searching for single element
select * from tbl1 where item ?| '{elem21,elem1}' // if any rows matches any of item in list element.
Вышеуказанные запросы нормально выполняются в консоли psql.
Как запустить приведенный выше запрос в собственном запросе загрузки Spring?
Написание запроса как

Код: Выделить всё

@Query("select * from tbl1 where item ? :elem ", nativeQuery=true)
List findBySingleElement(@Param("elem") String element)

@Query("select * from tbl1 where item ?| (:elems)", nativeQuery=true)
List findByAnyElement(@Param("elems") String[] elements)
// -------positional example----
@Query("select * from tbl1 where item ? ?1", nativeQuery=true)
List findBySingleElement(String element)

@Query("select * from tbl1 where item ?| (?1)", nativeQuery=true)
List findByAnyElement(String[] elements)
Это не компилирует, выдавая ошибку, поскольку
Мы не должны сопоставлять ? и параметризованные аннотации.

Код: Выделить всё

java.lang.IllegalArgumentException: Mixing of ? parameters and other forms like ?1 is not supported
Использование ?1 вместо :elem приводит к исключению отсутствующего параметра.
Как выйти ?, когда ? находится в операторе сравнения (я также пробовал ??| и \\?|, но это не работает.) Или есть ли способ написать это какие-то запросы, которых мне не хватает.
PS. На данный момент я создал специальную функцию psql посредством миграции базы данных и использую ее напрямую.

Подробнее здесь: https://stackoverflow.com/questions/793 ... -operators
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»