【发布时间】:2021-03-06 09:47:41
【问题描述】:
我在尝试使用 spanner 存储库从 Java 应用程序访问 spanner NUMERIC 列时收到Caused by: java.lang.IllegalArgumentException: Invalid code: UNRECOGNIZED。
我收到了上述错误。我在实体上尝试过 Long、float 和 bigdecimal。任何人都可以分享这方面的想法。
【问题讨论】:
我在尝试使用 spanner 存储库从 Java 应用程序访问 spanner NUMERIC 列时收到Caused by: java.lang.IllegalArgumentException: Invalid code: UNRECOGNIZED。
我收到了上述错误。我在实体上尝试过 Long、float 和 bigdecimal。任何人都可以分享这方面的想法。
【问题讨论】:
Cloud Spanner 中的NUMERIC 数据类型应与BigDecimal 一起使用。
Cloud Spanner Java 客户端库在 1.59.0 版中引入了对 NUMERIC 数据类型的支持。此错误最可能的原因是您使用的是旧版本的客户端库。您的问题提到您在“实体”上尝试过,这可能表明您正在使用 Hibernate。
您能否分享更多关于您的具体情况的信息,至少应包括:
还请始终包括:
【讨论】:
Numeric 将引用 Java 中的 BigDecimal。您可以随时查看 Spring Data Spanner 框架代码,其中包含从 java 到 spanner 的所有数据类型映射。
SpannerTypeMapper.java
【讨论】:
这是因为旧版本的扳手,数字类型是后来引入的,你可能使用了 bigdecimal,它不是 TYPECODE.class 的一部分
BigDecimal 与 NUMERIC 字段完美配合。
TYPE_CODE_UNSPECIFIED(0), 布尔(1), INT64(2), 浮动64(3), 时间戳(4), 日期(5), 字符串(6), 字节(7), 阵列(8), 结构(9), 数字(10)
如果您的 TYPECODE.class 包含所有这些。如果不是,请更新依赖项,您的问题必须得到解决。
【讨论】: