首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >BigDecimal存储在spring数据MongoDB中的字符串中。

BigDecimal存储在spring数据MongoDB中的字符串中。
EN

Stack Overflow用户
提问于 2021-12-27 10:15:20
回答 2查看 1.3K关注 0票数 3
代码语言:javascript
运行
复制
@Document(collection = "loanDetails")
class LoanDetails {
    @Transient
    public static final String COLLECTION_NAME = "loanDetails
    @Id
    String id

    String loanId
    String loanUUID
    String loanStatus
    Date loanDateCreated
    Date loanLastUpdated
    BigDecimal loanAmount //Stores in String
}

每当我在这个集合中保存一些数据时,我就声明了一个类LoanDetails和一个包含BigDecimal类型loanAmount的字段。

  1. 它以字符串的形式存储在mongo db数据库中。
  2. 当从数据库获取记录时,我得到了的错误,无法解码'LoandDetails‘。解码'loanAmount‘错误了: readDecimal只能在CurrentBSONType是DECIMAL128时调用,而不能在CurrentBSONType是STRING时调用。

我试图在loanAmount字段上添加注释

代码语言:javascript
运行
复制
@Field(targetType = Decimal128) // This also throws error does not contain targetType attribute attached screenshot for the same
BigDecimal loanAmount

EN

Stack Overflow用户

发布于 2021-12-30 11:23:35

可能,您需要删除/迁移已经创建的loanDetails,因为loanAmount字段被持久化为String

通过将@Field(targetType = FieldType.DECIMAL128)添加到loanAmount字段,它应该可以工作。

代码语言:javascript
运行
复制
import org.springframework.data.mongodb.core.mapping.FieldType;
...

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

public LoanDetails() {
    loanAmount = new BigDecimal(21.905334472656250);
}
...
 
template.save(loan);

template.find(new Query(), org.bson.Document.class, "loanDetails").forEach(l -> {
    System.out.println(l.get("loanAmount").getClass().getName() + " " + l.get("loanAmount"));   
});
//org.bson.types.Decimal128 21.90533447265625
    
template.findAll(LoanDetails.class).forEach(l -> {
    System.out.println(l.loanAmount.getClass().getName() + " " + l.loanAmount); 
});
//java.math.BigDecimal 21.90533447265625

如果你得到了Conversion to Decimal128 would require inexact rounding of XXX

注意:Decimal128类型只支持多达34位的精度。(一般情况下,“精度”=数字的总数#,小数位的“刻度”=#)。而Java BigDecimal可以更高。因此,在保存到DB之前,您需要舍入BigDecimal值(例如,使用BigDecimal.setScale())方法。

BigDecimalConverter问题 x- Decimal128

票数 1
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70494158

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档