逃逸?(问号)在hibernate/gorm sql限制中

逃逸?(问号)在hibernate/gorm sql限制中,sql,postgresql,gorm,Sql,Postgresql,Gorm,我试图查询Grails应用程序中使用postgres ltree类型存储的具体化路径。不幸的是,我的查询使用GORM捕获的“?”运算符作为参数 sqlRestriction("materialized_path ? (SELECT ARRAY(SELECT CAST(CAST(subpath(?,0,generate_series) AS text) ||'.*{1}' AS lquery) FROM generate_series(1,nlevel(CAST(? AS lquery)))))"

我试图查询Grails应用程序中使用postgres ltree类型存储的具体化路径。不幸的是,我的查询使用GORM捕获的“?”运算符作为参数

sqlRestriction("materialized_path ? (SELECT ARRAY(SELECT CAST(CAST(subpath(?,0,generate_series) AS text) ||'.*{1}' AS lquery) FROM generate_series(1,nlevel(CAST(? AS lquery)))))"
                ,[vertex.materializedPath,vertex.materializedPath])
第一个问号应该转义,抛出的错误是

org.postgresql.util.PSQLException: No value specified for parameter 4.
at org.postgresql.core.v3.SimpleParameterList.checkAllParametersSet(SimpleParameterList.java:246)
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:272)
at org.postgresql.jdbc.PgStatement.executeInternal(PgStatement.java:430)
at org.postgresql.jdbc.PgStatement.execute(PgStatement.java:356)
at org.postgresql.jdbc.PgPreparedStatement.executeWithFlags(PgPreparedStatement.java:168)
at org.postgresql.jdbc.PgPreparedStatement.executeQuery(PgPreparedStatement.java:116)
at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:70)

我自己通过一些实验发现了它。只需要两个问号。所以

"materialized_path ? (SELECT ARRAY(...
变成

"materialized_path ?? (SELECT ARRAY(

我自己通过一些实验发现了它。只需要两个问号。所以

"materialized_path ? (SELECT ARRAY(...
变成

"materialized_path ?? (SELECT ARRAY(