2

我在我的项目中使用 R2DBC。从 2.5.* 升级到 Spring Boot 到 2.6.1 后,我的查询:

    @Query("SELECT EXISTS(SELECT 1 FROM some_link links WHERE links.data_id = $1 AND links.some_id != links.source_id)")
    fun existsByDataIdAndLocked(dataId: UUID): Mono<Boolean>

抛出异常:

    Suppressed: java.lang.IllegalArgumentException: Cannot encode parameter of type org.springframework.r2dbc.core.Parameter
        at io.r2dbc.postgresql.codec.DefaultCodecs.encode(DefaultCodecs.java:192)
        at io.r2dbc.postgresql.ExtendedQueryPostgresqlStatement.bind(ExtendedQueryPostgresqlStatement.java:89)
        at io.r2dbc.postgresql.ExtendedQueryPostgresqlStatement.bind(ExtendedQueryPostgresqlStatement.java:47)
        at org.springframework.r2dbc.core.DefaultDatabaseClient$StatementWrapper.bind(DefaultDatabaseClient.java:544)
        at java.base/java.util.LinkedHashMap.forEach(LinkedHashMap.java:684)
        at org.springframework.data.r2dbc.repository.query.StringBasedR2dbcQuery$ExpandedQuery.bindTo(StringBasedR2dbcQuery.java:227)
        at org.springframework.r2dbc.core.DefaultDatabaseClient$DefaultGenericExecuteSpec.lambda$execute$2(DefaultDatabaseClient.java:334)
        at org.springframework.r2dbc.core.DefaultDatabaseClient$DefaultGenericExecuteSpec.lambda$execute$3(DefaultDatabaseClient.java:374)
        at org.springframework.r2dbc.core.ConnectionFunction.apply(ConnectionFunction.java:46)
        at org.springframework.r2dbc.core.ConnectionFunction.apply(ConnectionFunction.java:31)
        at org.springframework.r2dbc.core.DefaultFetchSpec.lambda$all$2(DefaultFetchSpec.java:88)
        at org.springframework.r2dbc.core.ConnectionFunction.apply(ConnectionFunction.java:46)
        at org.springframework.r2dbc.core.ConnectionFunction.apply(ConnectionFunction.java:31)
        at org.springframework.r2dbc.core.DefaultDatabaseClient.lambda$inConnectionMany$6(DefaultDatabaseClient.java:138)
        at reactor.core.publisher.FluxUsingWhen.deriveFluxFromResource(FluxUsingWhen.java:119)
        at reactor.core.publisher.FluxUsingWhen.access$000(FluxUsingWhen.java:53)
        at reactor.core.publisher.FluxUsingWhen$ResourceSubscriber.onNext(FluxUsingWhen.java:194)
        ... 172 more

一旦我$1将查询更改为:dataId然后它就可以工作了。

这是为什么?根据文档,两者都是有效的。

4

0 回答 0