4

项目设置为:Java 8、Hibernate 5.3.1、Oracle 18c

使用命名或序数参数执行查询时出现以下错误。仅当参数在函数内部时才会发生

select * from TABLE_PRIVILEGE a where ( ( json_exists(a.DATA,'$?(@.businessId in :businessId)')) 和 (a.DATA."resource" = :resource ) 和 (json_exists(a.DATA,' $?(@.actions in :actions)')) )

尝试设置函数中使用的任何参数时

查询#setParameter("businessId", value);

抛出异常

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)

如果在本机查询中我们使用序数参数,则相同

select * from TABLE_PRIVILEGE a where ( ( json_exists(a.DATA,'$?(@.businessId in ?1)')) and (a.DATA.resource = ?2) and ( json_exists(a.DATA,'$? (@.actions in ?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)
4

0 回答 0