Невозможно установить именованные (или порядковые) параметры в SQL, если внутри строки - PullRequest
1 голос
/ 07 марта 2019

Настройки проекта: Java 8, Hibernate 5.3.1, Oracle 18c

Получение следующей ошибки при выполнении запросов с именованными или порядковыми параметрами. Происходит, только если параметры находятся внутри функции

выберите * из TABLE_PRIVILEGE где (( json_exists (a.DATA, '$? (@. businessId in: businessId)')) и ( a.DATA. "resource" =: resource) и (json_exists (a.DATA, '$? (@. actions) в: действия) ')))

При попытке установить любой из параметров, используемых в функции

Query # setParameter ("businessId", значение);

Исключение выдается

java.lang.IllegalArgumentException: Could not locate named parameter [businessId], expecting one of [resource]
    at org.hibernate.query.internal.ParameterMetadataImpl.getNamedParameterDescriptor(ParameterMetadataImpl.java:218)
    at org.hibernate.query.internal.ParameterMetadataImpl.getQueryParameter(ParameterMetadataImpl.java:187)
    at org.hibernate.query.internal.QueryParameterBindingsImpl.resolveQueryParameter(QueryParameterBindingsImpl.java:460)

То же самое, если в собственном запросе мы используем порядковые параметры

выберите * из TABLE_PRIVILEGE где (( json_exists (a.DATA, '$? (@. businessId in? 1)')) и (a.DATA.resource = ? 2) и (json_exists (a.DATA, '$? (@. Действия в? 3)')))

java.lang.IllegalArgumentException: Could not locate ordinal parameter [1], expecting one of [2]
      at org.hibernate.query.internal.ParameterMetadataImpl.getOrdinalParameterDescriptor(ParameterMetadataImpl.java:143)
      at org.hibernate.query.internal.ParameterMetadataImpl.getQueryParameter(ParameterMetadataImpl.java:193)
      at org.hibernate.query.internal.AbstractProducedQuery.setParameter(AbstractProducedQuery.java:509)
      at org.hibernate.query.internal.NativeQueryImpl.setParameter(NativeQueryImpl.java:608)
      at org.hibernate.query.internal.NativeQueryImpl.setParameter(NativeQueryImpl.java:57)
...