【问题标题】:Java equivalent of Spanner numeric data typeSpanner 数值数据类型的 Java 等效项
【发布时间】:2021-03-06 09:47:41
【问题描述】:

我在尝试使用 spanner 存储库从 Java 应用程序访问 spanner NUMERIC 列时收到Caused by: java.lang.IllegalArgumentException: Invalid code: UNRECOGNIZED。 我收到了上述错误。我在实体上尝试过 Long、float 和 bigdecimal。任何人都可以分享这方面的想法。

【问题讨论】:

    标签: google-cloud-spanner


    【解决方案1】:

    Cloud Spanner 中的NUMERIC 数据类型应与BigDecimal 一起使用。

    Cloud Spanner Java 客户端库在 1.59.0 版中引入了对 NUMERIC 数据类型的支持。此错误最可能的原因是您使用的是旧版本的客户端库。您的问题提到您在“实体”上尝试过,这可能表明您正在使用 Hibernate。

    您能否分享更多关于您的具体情况的信息,至少应包括:

    • 您正在使用的任何相关框架(Hibernate、Spring 等)
    • 这些框架的版本
    • Cloud Spanner Java 客户端库的版本

    还请始终包括:

    • 实际代码的 sn-p,或实际重现问题的小代码示例。
    • 错误的整个(匿名)堆栈跟踪,而不仅仅是错误消息。

    【讨论】:

      【解决方案2】:

      Numeric 将引用 Java 中的 BigDecimal。您可以随时查看 Spring Data Spanner 框架代码,其中包含从 java 到 spanner 的所有数据类型映射。

      SpannerTypeMapper.java

      https://github.com/spring-cloud/spring-cloud-gcp/blob/master/spring-cloud-gcp-data-spanner/src/main/java/org/springframework/cloud/gcp/data/spanner/core/convert/SpannerTypeMapper.java

      【讨论】:

        【解决方案3】:

        这是因为旧版本的扳手,数字类型是后来引入的,你可能使用了 bigdecimal,它不是 TYPECODE.class 的一部分

        BigDecimal 与 NUMERIC 字段完美配合。

        TYPE_CODE_UNSPECIFIED(0), 布尔(1), INT64(2), 浮动64(3), 时间戳(4), 日期(5), 字符串(6), 字节(7), 阵列(8), 结构(9), 数字(10)

        如果您的 TYPECODE.class 包含所有这些。如果不是,请更新依赖项,您的问题必须得到解决。

        【讨论】:

          猜你喜欢
          • 2010-09-30
          • 2019-07-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-01-13
          • 1970-01-01
          相关资源
          最近更新 更多