1

我需要在我的实体中存储一个货币值(未索引)并且我得到

java.lang.IllegalArgumentException: kmrate: java.math.BigDecimal is not a supported property type.

谷歌搜索,似乎 BigDecimalLongTranslatorFactory 可能是解决方案的一部分,但我找不到任何文档或示例。

4

1 回答 1

2

BigDecimalLongTranslatorFactory() 的文档说“在执行注册的同时”安装它,但我发现它必须在注册之前。

例如,使用推荐的“使用您自己的服务”方法注册实体,以下将导致稍后包含 BigDecimal 属性的实体的 save() 失败并出现 UnsupportedOperationException(带有消息“不支持的数据类型:java.math.BigDecimal” ):

public class OfyService {
    static {
        factory().register(Thing.class);
        factory().register(OtherThing.class);
        factory().getTranslators().add(new BigDecimalLongTranslatorFactory());
    }

    public static Objectify ofy() {
        return ObjectifyService.ofy();
    }
    public static ObjectifyFactory factory() {
        return ObjectifyService.factory();
    }
}

但如果我在注册前这样做,它会起作用:

public class OfyService {
    static {
        factory().getTranslators().add(new BigDecimalLongTranslatorFactory());
        factory().register(Thing.class);
        factory().register(OtherThing.class);
    }

    public static Objectify ofy() {
        return ObjectifyService.ofy();
    }
    public static ObjectifyFactory factory() {
        return ObjectifyService.factory();
    }
}

我还没有深入研究 Objectify 的翻译系统来确切了解为什么会这样。

注意:我使用的是 Objectify 4.0b3。

于 2014-03-04T03:09:01.343 回答