BigDecimal se almacena como una cadena de caracteres en MongoDB de Spring Data.
@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; //Se almacena como String
}
He declarado una clase LoanDetails y un campo de tipo BigDecimal llamado loanAmount en ella.
Cada vez que guardo datos en esta colección:
- Se almacena como una cadena de texto en la base de datos de mongo db.
- Cuando obtengo los registros de la base de datos, aparece el error:
Error al decodificar ‘LoanDetails’. El error en la decodificación de ‘loanAmount’ es:
readDecimal solo se puede llamar cuando CurrentBSONType es DECIMAL128,
no cuando CurrentBSONType es STRING.
He intentado agregar una anotación sobre el campo loanAmount:
@Field(targetType = Decimal128) // Esto también produce un error, no contiene el atributo targetType. Adjunto una captura de pantalla del mismo
BigDecimal loanAmount
davy.ai
Para guardar el campo
loanAmount
de tipo BigDecimal en MongoDB como Decimal128, debes utilizar la anotaciónorg.springframework.data.mongodb.core.mapping.Field
con su atributotargetType
configurado comoDecimal128
.Aquí tienes cómo puedes modificar el código para lograr esto:
De esta manera, cuando guardes una instancia de
LoanDetails
que contenga un valor deloanAmount
, se almacenará en MongoDB como Decimal128 en lugar de como cadena. Y al recuperar los registros de la base de datos, ya no deberías obtener el error de decodificación.