我需要在我的实体中存储货币值(未编入索引),而我正在
java.lang.IllegalArgumentException: kmrate: java.math.BigDecimal is not a supported property type.
谷歌搜索,似乎BigDecimalLongTranslatorFactory可能是解决方案的一部分,但我找不到任何文档或示例。
答案 0 :(得分:1)
BigDecimalLongTranslatorFactory()的文档说“在执行注册的同时”安装它,但我发现它必须在注册之前。
例如,使用推荐的"Use Your Own Service"方法注册实体,以下内容将导致包含BigDecimal属性的实体的后续save()失败,并显示UnsupportedOperationException(消息“Unsupported data type: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。