我有一项带有 Jpa r2dbc 存储库的服务和一种方法。此方法应返回自定义 SQL 函数(而不是表)中的选择。当应用程序使用该方法时,我遇到错误。
具有方法的存储库:
public interface VirtualAuthorityRepository extends ReactiveCrudRepository<VirtualAuthority, Long> {
@Query("SELECT ... FROM get_valid_virtual_relations(: accountId)")
Flux<VirtualAuthority> getVirtualAuthority(@NonNull Long accountId);
}
get_valid_virtual_relations 函数示例
create function get_valid_virtual_relations(accountid integer)
returns TABLE(authority_id integer, expire_at timestamp without time zone)
language plpgsql
as
$$
BEGIN
RETURN QUERY SELECT ...;
END;
错误信息:
io.r2dbc.postgresql.QUERY:执行查询:BEGIN READ ONLY io.r2dbc.postgresql.PARAM:将参数 [0] 绑定到:1 io.r2dbc.postgresql.QUERY :执行查询:SELECT * FROM get_valid_virtual_relations($1) io.r2dbc.postgresql.QUERY:执行查询:ROLLBACK c.f.c.e.BaseGrpcExceptionHandler:org.springframework.r2dbc.BadSqlGrammarException:executeMany;错误的 SQL 语法 [SELECT * FROM get_valid_virtual_relations($1)]
: 和 accountId 之间似乎有空格,这可能会导致 BadSqlGrammarException。删除后尝试类似:
@Query("SELECT * FROM get_valid_virtual_relations(:accountId)")
PS:我没有足够的声誉来发表评论,所以将其添加为答案