@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 }Declaré una clase Detalles de Préstamo y un campo con tipo BigDecimal cantidad de préstamo en él Cada vez que guardé algunos datos en esta colección
Intenté agregar una anotación sobre el campo monto del préstamo
@Field(targetType = Decimal128) // This also throws error does not contain targetType attribute attached screenshot for the same BigDecimal loanAmountProbablemente, deba eliminar/migrar sus detalles de loanDetails ya creados, ya que el campo loanAmount de préstamo se mantiene como String .
Al agregar @Field(targetType = FieldType.DECIMAL128) a su campo de cantidad de loanAmount , debería funcionar.
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 Si obtiene Conversion to Decimal128 would require inexact rounding of XXX
Nota: El tipo
Decimal128solo admite hasta 34 dígitos de precisión. (Generalmente, "precisión" = número total de dígitos, mientras que "escala" = número de dígitos decimales). Mientras que un Java BigDecimal puede ir más alto. Entonces, antes de guardar en la base de datos, debe redondear el valor BigDecimal (por ejemplo, useBigDecimal.setScale()).