Я использую db4o 8.0 с прозрачной активацией/постоянством ... У меня есть класс, который содержит EnumSet (и другие вещи). Я создаю экземпляр, добавляю значение перечисления в множество и сохраняю. Когда я ищу в БД, получить его и пытается активировать объект, я получаю это исключение:db4o enumset exception
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());
Я не могу понять, в чем проблема является. Есть идеи?
EDIT:
Я не знаю, где задавать вопросы о 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 будет генерировать исключение , потому что не существует конструктора по умолчанию, и все конструкторы с нулевыми аргументами будут терпеть неудачу для этих классов. Db4o.configure(). ObjectClass ("java.util.EnumMap"). Translate (новый com.db4o.config.TSerializable()) решит проблему, конечно. Я думаю, что стандартная структура коллекции должна поддерживаться.
Спасибо за ответ! У меня здесь ситуация ... Мой проект полон перечислений, и это очень сложно изменить или обрабатывать вещи без перечислений. Здесь я должен найти хак. Могу ли я каким-то образом использовать переводчиков и сохранить перечисления как строки? – ApollonDigital
После того, как вы потратили достаточно времени на учебники и поиски о db4o, я чувствую, что есть много ошибок и плохих проектов. Я не уверен даже в том, насколько активен проект. Иногда я думаю, что я должен начать искать что-то лучше, но я не знаю, есть ли хорошие альтернативы. Решения Sql на низком уровне и очень строго определены, а oodbs не так популярны и хорошо разработаны ... Базы данных такие беспорядок: p – ApollonDigital
Вы нашли решение с db4o? Потому что у меня такая же проблема. – rob