Spring Boot, R2DBC, Querydsl,带参数的查询- mssqlbadgrammareexcepti



当我使用参数Param<LocalDateTime>运行查询时,直接使用SQLServer2012Templates一切正常。
[DEBUG] [||] com.querydsl.sql。显示生成的查询'?',但据我所知,它不是发送给SQL Server的查询。

当同样的查询通过QuerydslR2dbcRepository运行时,我得到异常:

o.r2dbc.mssql。ExceptionFactory$ mssqlbadgramareexception: [102] [S0001]语法错误,接近'?'

依赖性:
实现org.springframework。数据:spring-data-r2dbc
实现io。r2dbc: r2dbc-mssql">
实现"com.infobip: infobip-spring-data-r2dbc-querydsl-boot-starter: 7.0.0

如何解决这个问题?

R2DBC规范团队明确决定不遵循绑定参数占位符的JDBC语法,请参阅我在邮件列表中提出的讨论。这意味着所有基于JDBC的库要么:

  • 必须显式支持R2DBC,并自己实现特定于供应商的每个驱动程序语法
  • 不支持R2DBC绑定变量(当然内联值仍然是可能的)

从我发现的(并在上述邮件列表中记录)来看,语法至少是:

-- Oracle and others
SELECT * FROM t WHERE id = :1
SELECT * FROM t WHERE id = :name
-- SQL Server
SELECT * FROM t WHERE id = @name
-- PostgreSQL
SELECT * FROM t WHERE id = $1

你最简单的选择是:

  • 向QueryDSL发送特性请求
  • 在QueryDSL级别或R2DBC级别或其他级别上修补生成的SQL,将所有独立的?标记替换为$n(这将与regex一起棘手,可能需要一个简单的解析器来识别注释,字符串字面量等)
  • 直接使用R2DBC

相关内容

  • 没有找到相关文章

最新更新