ormlite DataType.ENUM_STRING给我"对数据持久性无效"

max*_*ver 0 android ormlite

您好我使用的是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
Run Code Online (Sandbox Code Playgroud)

这是班级

@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;
    ...
 }
Run Code Online (Sandbox Code Playgroud)

我运行DatabaseConfigUtil来更新ormlite_config.txt,现在我认为唯一的解决方案是将字段的类型更改为String

Gra*_*ray 5

ORMLite不支持仅由几种数据库类型支持的数据库SQL枚举列.本ENUM_STRING应该坚持枚举类型.就像是:

 @DatabaseField
 private OurEnum udm;
 ...

 public enum OurEnum {
    RED, GREEN, BLUE;
 }
Run Code Online (Sandbox Code Playgroud)

默认情况下,ORMLite将在枚举中将其保存为VARCHARSQL字段中的字符串值(RED,GREEN,BLUE).如果你有一个String字段,那么你应该让它作为一种STRING类型持久存在.您也可以使用DataType.ENUM_INTEGERif来存储其值,但出于向后兼容性原因,不建议这样做.

如果您编辑问题以更好地解释您要完成的任务,我可以编辑我的答案以提供更多信息.