Я получаю сообщение об ошибке ниже, пытаясь сохранить объект с набором интерфейсов, которые я хочу содержать для нескольких разных типов объектов. Кажется, это происходит почти случайно. Иногда после перезагрузки все работает нормально (хотя может я что-то не так делаю).
class CommentList {
@Persistent
@Join
ArrayList<IComment> = new ArrayList<IComment>();
}
где-нибудь еще...
CommentList cl = new CommentList();
cl.addComment( new SimpleComment() );
cl.addComment( new SpecialComment() );
repo.persist( cl );
Я вижу, что таблица соединений была создана в моей БД вместе с полями идентификаторов для каждого из классов реализации IComment.
SimpleComment и SpecialComment реализуют IComment. Если я просто добавлю SimpleComment, он отлично работает. Как только я начинаю пытаться добавить другие типы объектов, я начинаю получать ошибки.
ошибка, которую я получаю
java.lang.ClassCastException: Field "com.myapp.model.CommentList.comments" is a reference field (interface/Object) of type com.myapp.behaviours.IComment but DataNucleus is unable to assign an object of type "com.myapp.model.ShortComment" to this field. You can only assign this field to a type specified by the "implementation-classes" extension attribute.
at org.datanucleus.store.mapped.mapping.MultiMapping.setObject(MultiMapping.java:220)
at org.datanucleus.store.mapped.mapping.ReferenceMapping.setObject(ReferenceMapping.java:526)
at org.datanucleus.store.mapped.mapping.MultiMapping.setObject(MultiMapping.java:200)
at org.datanucleus.store.rdbms.scostore.BackingStoreHelper.populateElementInStatement(BackingStoreHelpe
r.java:135)
at org.datanucleus.store.rdbms.scostore.RDBMSJoinListStoreSpecialization.internalAdd(RDBMSJoinListStore
Specialization.java:443)
at org.datanucleus.store.mapped.scostore.JoinListStore.internalAdd(JoinListStore.java:233)
Когда он сохраняется, если я перезапускаю сервер и пытаюсь запросить список комментариев, я получаю нулевые значения.
Я использую серверную часть mysql - если я переключаюсь на db4o, все работает нормально.
Пожалуйста, дайте мне знать, если какая-либо информация будет полезна.
Если у вас есть какие-либо идеи, где я могу ошибиться, или можете предоставить пример кода для сохранения коллекции различных объектов, реализующих один и тот же интерфейс, это было бы полезно.
Спасибо за любую помощь.
Том