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 に答える