开发者问题收集

在 R2DBC mysql 模型类中,java.lang.Integer 无法转换为类 java.lang.Long

2023-01-01
2710

我在弹簧WebFlux反应性网络中使用R2DBC MySQL驱动程序。我尝试执行表格架SQL脚本。但是脚本连续导致错误。

首先,我进行了3个模型类。

user.java

497735174

post.java

650496422

tag.java

929018272

schema.sql

881881925

配置方法执行schema.sql。方法

460454988

但是,最初执行的架构.sql抛出错误,

377263514

我认为我的反应性R2DBC模型类包含一些错误。 ClassCastException。但是我不知道什么元素有错误的类型。打印错误消息显示没有代码行号。我将模型类的ID类型(用户,帖子,标签)更改为整数类型,但是抛出了相同的错误。

3个回答

如果您正在使用 https://github.com/mirromutth/r2dbc-mysql 0.8.x RELEASE 和最新的 Spring Boot 2.7 或 Spring Boot 3.0.x,我认为您使用的 R2dbc MySQL 驱动与 Spring Boot 管理的 R2dbc SPI 存在兼容性问题。

在最新的 Spring Boot 3.0 中,R2dbc SPI 更新到 1.0,自 0.8 以来引入了几个不兼容的 API(r2dbc-mysql 0.8.x RELEASE 与 R2dbc SPI 0.8 对齐)。 我在升级到 R2dbc 0.9 和 1.0 但使用的驱动程序版本不兼容时遇到了类似的异常

  • 尝试使用最新的 MariaDB R2dbc 驱动程序 连接您的 MySQL
  • 考虑其他数据库,例如PostgreSQL 或直接切换到 MariaDB。

更新(2023-5-23) :在最新的 Spring Boot 3.x 中,它包含 jasycn r2dbc mysql ,而不是原始的 r2dbc mysql 驱动程序 ,该驱动程序未激活并坚持使用旧的 R2dbc SPI 0.8。

Hantsy
2023-01-02

我假设您正在使用最新版本的 Spring Boot 和 Spring Framework。

该问题的根本原因是使用 r2dbc-spi:1.0.0,它需要 getRowsUpdated() 返回 Long,但您使用的是 dev.miku:r2dbc-mysql:0.8.2,它返回 Integer。

我建议切换到 io.asyncer:r2dbc-mysql:1.0.0 ,它是 dev.miku:r2dbc-mysql 的官方后继者。有关详细信息,请参阅 弃用新闻

jchrys
2023-04-10

帮助我将依赖项从

implementation("org.postgresql:r2dbc-postgresql:1.0.0.RELEASE")

更改为

implementation("io.r2dbc:r2dbc-postgresql:0.8.13.RELEASE")

适用于 springboot 2.7.6

感谢 Hantsy。

AlekseiG
2023-02-09