我需要在我的实体中存储一个货币值(未索引)并且我得到
java.lang.IllegalArgumentException: kmrate: java.math.BigDecimal is not a supported property type.
谷歌搜索,似乎 BigDecimalLongTranslatorFactory 可能是解决方案的一部分,但我找不到任何文档或示例。
我需要在我的实体中存储一个货币值(未索引)并且我得到
java.lang.IllegalArgumentException: kmrate: java.math.BigDecimal is not a supported property type.
谷歌搜索,似乎 BigDecimalLongTranslatorFactory 可能是解决方案的一部分,但我找不到任何文档或示例。
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。