ormlite DataType.ENUM_STRING дает мне "недопустимо для сохранения данных" - PullRequest
0 голосов
/ 19 января 2012

Здравствуйте, я использую ORMLite 4.33.

У меня есть класс сущностей, который выдает ошибку при попытке destroyTable:

E/AndroidRuntime(6715): java.lang.IllegalArgumentException: Field class
     java.lang.String for field FieldType:name=udm,class=Prodotti is not valid
     for data persister com.j256.ormlite.field.types.EnumStringType@40a3a2e0

вот класс

@DatabaseTable(tableName = "Prodotti")
public class Prodotti extends BaseDaoEnabled{
    ....
    @DatabaseField(dataType = DataType.ENUM_STRING,
         columnDefinition="VARCHAR(100) DEFAULT NULL")
    //also tried @DatabaseField(dataType = DataType.ENUM_STRING)
    private String udm;
    ...
 }

Я запустил DatabaseConfigUtil для обновления ormlite_config.txt, сейчас я думаю, что единственное решение - изменить тип поля на String

1 Ответ

5 голосов
/ 19 января 2012

ORMLite не поддерживает столбцы перечисления SQL базы данных, которые поддерживаются только несколькими типами баз данных. ENUM_STRING должен сохранять тип enum. Что-то вроде:

 @DatabaseField
 private OurEnum udm;
 ...

 public enum OurEnum {
    RED, GREEN, BLUE;
 }

По умолчанию ORMLite сохранит перечисление в виде строкового значения (КРАСНЫЙ, ЗЕЛЕНЫЙ, СИНИЙ) в поле VARCHAR SQL. Если у вас есть поле String, вам следует просто сохранить его как тип STRING. Вы также можете использовать DataType.ENUM_INTEGER, если хотите вместо этого сохранить его значение, но это не рекомендуется по причинам обратной совместимости.

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

...