Java 用Morphia读取BigDecimal

Java 用Morphia读取BigDecimal,java,mongodb,morphia,Java,Mongodb,Morphia,我有一个使用BigDecimal的POJO。当我将对象保存到morphia时,很明显该值保存为字符串。但是,如果我从javascript shell修改数据库,使其具有一些十进制数值,则尝试使用morphia类读取对象时,会失败,并出现以下错误: 例如: @Entity(value = "table_name", noClassnameStored = true) public class Advertisement implements Table { BigDecimal value;

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

例如:

@Entity(value = "table_name", noClassnameStored = true)
public class Advertisement implements Table {
  BigDecimal value;
}


向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()注释。而不是允许morphia命名密钥

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;
}

}