当前位置: 首页 > 知识库问答 >
问题:

Spring Data MongoDB BigDecimal支持

扶珂
2023-03-14

伙计们,我对Spring Data MongoDB提供的BigDecimal值支持有疑问,有人能帮我提供一些关于它的消息吗,是否会支持这种类型,或者是否有人知道一种解决方法来满足我的需求。这就是交易:我正在做一个项目,我们使用MongoDB作为DB,Spring作为框架,我们希望将数据库中应该获取金钱值的字段保存为BigDecimal,我已经读到mongo只接受double作为浮点数,但我认为这种类型不会有用。你们能告诉我一些情况吗?

共有3个答案

申屠黎昕
2023-03-14

如Spring Data MongoDB-参考文档18.6所述。自定义转换-覆盖默认映射:

影响映射结果的最简单方法是通过@Field注释指定所需的本机MongoDB目标类型。这允许在域模型中使用非MongoDB类型,如BigDecimal,同时以本机org.bson.types.Decimal128格式保存值。

public class Payment {

  @Field(targetType = FieldType.DECIMAL128) 
  BigDecimal value;

}

所需的目标类型显式定义为Decimal128,转换为NumberDecimal。否则BigDecimal值将被转换为String

json prettyprint-override">{
  "value" : NumberDecimal(2.099)
}
濮阳研
2023-03-14

您可以更改BigDecimaldoDecimal128的转换器,这是自mongo 3.4以来的NumberDecimaljava表示形式:

@Bean
public MongoCustomConversions mongoCustomConversions() {
    return new MongoCustomConversions(Arrays.asList(

        new Converter<BigDecimal, Decimal128>() {

            @Override
            public Decimal128 convert(@NonNull BigDecimal source) {
                return new Decimal128(source);
            }
        },

        new Converter<Decimal128, BigDecimal>() {

            @Override
            public BigDecimal convert(@NonNull Decimal128 source) {
                return source.bigDecimalValue();
            }

        }


    ));

}

实际上,从Spring数据2.0.7开始。将上述更改发布到以下位置:

@Bean
public MongoCustomConversions mongoCustomConversions() {
    return new MongoCustomConversions(Arrays.asList(
        new BigDecimalDecimal128Converter(),
        new Decimal128BigDecimalConverter()
    ));

}

@WritingConverter
private static class BigDecimalDecimal128Converter implements Converter<BigDecimal, Decimal128> {

    @Override
    public Decimal128 convert(@NonNull BigDecimal source) {
        return new Decimal128(source);
    }
}

@ReadingConverter
private static class Decimal128BigDecimalConverter implements Converter<Decimal128, BigDecimal> {

    @Override
    public BigDecimal convert(@NonNull Decimal128 source) {
        return source.bigDecimalValue();
    }

}
翟善
2023-03-14

Spring Data MongoDB在写入时将BigDecimal值转换为String并在读取时返回。请查看参考手册的数据映射和类型转换部分。

可以通过@Field(targetType=…)修改默认转换 如下所示。

@Field(targetType = DECIMAL128)
private BigDecimal value;

 类似资料:
  • 对于Requests,如果你有问题或者建议,可以通过下面几种方法得到支持: StackOverflow 如果你的问题不包含敏感或私有信息,或者你能将这些信息匿名化,那你就可以在 StackOverflow 上使用 python-requests 标签提问。 发送推文 如果你的问题在140个字符内描述,欢迎在 twitter 上发送推文至 @kennethreitz, @sigmavirus24,

  • Jython 是在 Java 平台 (JVM) 运行的 Python 实现。这个文档将让你在Jython之上运行Django。 Installing Jython Django使用Jython 2.7b2及更高版本。有关下载和安装说明,请参阅Jython网站。 Creating a servlet container 如果你只是想试验Django,请跳到下一节; Django包含一个可以用于测试的

  • Babel 的社区非常庞大并且增长速度很快,伴随着我们成长的同时我们希望保证人们总能获取他们需要的所有资源。 所以我们提供了数种途径来提供支持。 谨记在所有的这些沟通渠道里我们都共同遵守一套行为准则。 破坏准则的行为会被处理。 所以请阅读它并在与他人互动时注意自己的行为。 同时我们也在寻求发展一个自我支持式的社区,为那些始终热诚奉献的人们。 如果别人问的问题你恰好知道答案,请不吝花费几分钟帮帮他们

  • 如何让Java8与Eclipse一起工作? 我遵循了这个指南,但不起作用。我也看过EclipseJava8维基页面,但是他们没有解释如何处理签出的git存储库。

  • suEXEC特性使得Apache可以使用与调用web服务器的用户不同的用户身份来运行CGI和SSI程序。而通常情况下,CGI或者SSI程序执行时使用和web服务器相同的用户身份。 正确运用该特性,可以减少很多因为提供用户执行私有CGI或者SSI程序所带来的安全风险。但如果配置不当的话,则可能引起很多问题,使你的计算机产生更多的安全漏洞。如果你对管理 setuid root 程序以及可能导致的安全问

  • 有些项目的代码组织中使用了 git submodule 功能,但是如果某个项目引用的 submodule 是私有的,会导致代码构建/持续集成时拉取代码失败。这时可以参考下面的流程进行操作达到支持私有 submodule 的目的。 下面的例子以 Github 为例 创建项目 按照正常流程创建代码构建项目,在项目“设置”页面可以查看 Deploy Key。 复制 Deploy Key 点击如下所示红框

  • 写测试用例都很头疼,然而对核心方法的单元测试是非常重要的. nutz-plugins-mock 提供了 Ioc支持,Mvc环境, Servlet Mock对象 基本用法 添加依赖 <dependency> <groupId>org.nutz</groupId> <artifactId>nutz-plugins-mock</artifactId>

  • 什么是TypeScript TypeScript 是 JavaScript 的强类型版本,就然后在编译期去掉类型和特有语法,生成纯粹的 JavaScript 代码。由于最终在浏览器中运行的仍然是 JavaScript,所以 TypeScript 并不依赖于浏览器的支持,也并不会带来兼容性问题。 TypeScript 是 JavaScript 的超集,这意味着他支持所有的 JavaScript 语法