gpt4 book ai didi

java - 使用 Morphia 读取 BigDecimal

转载 作者:行者123 更新时间:2023-12-02 05:41:15 24 4
gpt4 key购买 nike

我有一个使用 BigDecimal 的 POJO。当我将对象保存到吗啡时,很明显该值被保存为字符串。但是,如果我从 javascript shell 修改数据库以获取一些十进制数值,则尝试使用 morphia 类读取对象,它会失败并出现以下错误:

例如:

@Entity(value = "table_name", noClassnameStored = true)
public class Advertisement implements Table {
BigDecimal value;
}
<小时/>
java.lang.ArrayStoreException
at java.lang.System.arraycopy(Native Method)
at java.util.ArrayList.toArray(ArrayList.java:361)
at org.mongodb.morphia.utils.ReflectionUtils.convertToArray(ReflectionUtils.java:537)
at org.mongodb.morphia.converters.IntegerConverter.decode(IntegerConverter.java:35)
at org.mongodb.morphia.converters.DefaultConverters.fromDBObject(DefaultConverters.java:134)
at org.mongodb.morphia.mapping.ValueMapper.fromDBObject(ValueMapper.java:27)
at org.mongodb.morphia.mapping.Mapper.readMappedField(Mapper.java:604)
at org.mongodb.morphia.mapping.Mapper.fromDb(Mapper.java:585)
at org.mongodb.morphia.mapping.Mapper.fromDBObject(Mapper.java:296)
at org.mongodb.morphia.query.MorphiaIterator.convertItem(MorphiaIterator.java:78)
at org.mongodb.morphia.query.MorphiaIterator.processItem(MorphiaIterator.java:65)
at org.mongodb.morphia.query.MorphiaIterator.next(MorphiaIterator.java:60)
at org.mongodb.morphia.query.QueryImpl.asList(QueryImpl.java:294)
at
...

将字符串形式的十进制值添加到 mongodb 以便 morphia 可以将该值读取到 Java BigDecimal 中的正确形式是什么?

最佳答案

作为 @evancholy 的引用,我已经有了 BigDecimal 代码,能够在 Morphia 中使用 object 的代码。这是代码:

public class BigDecimalConverter extends TypeConverter {

public BigDecimalConverter() {
super(BigDecimal.class);
}

@Override
public Object encode(Object value, MappedField optionalExtraInfo) {
BigDecimal val = (BigDecimal) value;
if (val == null)
return null;
return val.toPlainString();
}

@Override
public Object decode(Class targetClass, Object fromDBObject,
MappedField optionalExtraInfo) {
if (fromDBObject == null)
return null;
BigDecimal dec = new BigDecimal(fromDBObject.toString());
return dec;
}

}

直到最近我创建了一个新的 POJO 集合时,此功能才有效。

奇怪的是,解决方法是对变量使用 @Property() 注释。而不是让吗啡命名 key 。

关于java - 使用 Morphia 读取 BigDecimal,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24498011/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com