JDO перечисляет реализующий интерфейс

#java #interface #enums #jdo

#java #интерфейс #перечисления #jdo

Вопрос:

Я пытаюсь создать сохраняемый класс JDO, который содержит список перечислений, реализующих определенный интерфейс. Вот код:

 public interface Column {

}

public enum ColumnType1 implements Column {
    VALUE11, VALUE12
}

public enum ColumnType2 implements Column {
    VALUE21, VALUE22
}
  

И это сохраняемый класс:

 @PersistenceCapable(detachable = "true")
public class ListTable implements Serializable {

    @PrimaryKey
    @Persistent(valueStrategy = IdGeneratorStrategy.UUIDHEX)
    @Column(jdbcType = "VARCHAR", length = 32)
    private String encodedKey;

    // the list of columns that can be displayed in the table
    @Persistent(defaultFetchGroup = "true", nullValue = NullValue.EXCEPTION)
    private List<Column> columns;

    // constructor and getters ...
}
  

Проблема в том, что я получаю эту ошибку:

 javax.jdo.JDOUserException: The MetaData for the element class "com.example.shared.model.Column" of the collection field "com.example.shared.model.ListTable.columns" was not found.
at org.datanucleus.jdo.NucleusJDOHelper.getJDOExceptionForNucleusException(NucleusJDOHelper.java:497)
at org.datanucleus.jdo.JDOPersistenceManager.jdoMakePersistent(JDOPersistenceManager.java:671)
at org.datanucleus.jdo.JDOPersistenceManager.makePersistent(JDOPersistenceManager.java:691)
  

когда я пытаюсь сохранить таблицу списков.
Есть ли у вас какие-либо предложения о том, что я могу сделать, чтобы иметь возможность сохранять список перечислений, которые реализуют определенный интерфейс?

Ответ №1:

Реализация интерфейса «Объект второго класса» (SCO) не является типом, поддерживаемым JDO (см. спецификацию JDO). Интерфейсы предназначены для постоянных типов (FCOS)

Комментарии:

1. Итак, приведенный выше сценарий не может быть воспроизведен на практике с использованием JDO? Или у вас есть какие-либо предложения о том, как сделать это по-другому?