透明なアクティベーション/永続性を備えたdb4o 8.0を使用しています... EnumSet(およびその他のもの)を含むクラスがあります。インスタンス化し、列挙値をセットに追加して保存します。DBで検索して取得し、オブジェクトをアクティブ化しようとすると、次の例外が発生します。
Exception in thread "main" java.lang.ClassCastException: class Resources.Enums$fooEnum_t != null
at java.util.EnumSet.typeCheck(EnumSet.java:380)
at java.util.RegularEnumSet.add(RegularEnumSet.java:160)
at java.util.RegularEnumSet.add(RegularEnumSet.java:36)
at com.db4o.typehandlers.CollectionTypeHandler.addToCollection(CollectionTypeHandler.java:120)
at com.db4o.typehandlers.CollectionTypeHandler.activate(CollectionTypeHandler.java:45)
at com.db4o.internal.Handlers4.activate(Handlers4.java:300)
...
...
enumSet を db4o に格納するには、次を使用します。
config.common().objectClass(EnumSet.class).translate(new com.db4o.config.TSerializable());
何が問題なのかわかりません。何か案は?
編集:
db4o について質問する場所がわかりません。SO コミュニティは db4o についてあまり活発ではないようです。これは、db4o があまり普及していないためか、それとも「サポート」のための別の場所があるためですか?
EDIT 2:
関連するかもしれないが役に立たない versant のフォーラムの投稿を見つけました:
http://community.versant.com/Forums/tabid/98/aft/1046/Default.aspx#3370
もう一つ認識しました。java.util.EnumMap および java.util.EnumSet の組み込みサポートはありません。db4o は例外をスローします。これは、デフォルトのコンストラクターがなく、null 引数を持つすべてのコンストラクターがこれらのクラスに対して失敗するためです。Db4o.configure().objectClass("java.util.EnumMap").translate(new com.db4o.config.TSerializable()) はもちろん問題を解決します。標準のコレクション フレームワークをサポートする必要があると思います。