项目设置为: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)