java - 使用 Morphia 读取 BigDecimal

标签 java mongodb morphia

我有一个使用 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/

相关文章:

Java:将属性声明为 Java 给定类型或自编写类型(也许带有接口(interface)?)

mongodb - 检查字段是否包含字符串

mongodb - 我正在研究 Morphia,但对 DBRef 感到困惑

java - Morphia 数据存储获取、保存、删除查询

Java代码从不进入try-catch中的try block

java - .NET 的 XmlSerializer 的 Java 替代方案是什么

java - 将 arrayList<Object[]> 转换为嵌套数组

node.js - 使用 Mongoose 进入快速路由文件

database - Cloudant 查询错误 : missing search index when trying to sort

java - 无法使用带有Java的Morphia在Mongodb中存储GeoJson Polygon对象