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

时间:2012-01-19 10:39:21

标签: 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

这是班级

@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 个答案:

答案 0 :(得分:5)

ORMLite不支持仅由几种数据库类型支持的数据库SQL枚举列。 ENUM_STRING应该保持枚举类型。类似的东西:

 @DatabaseField
 private OurEnum udm;
 ...

 public enum OurEnum {
    RED, GREEN, BLUE;
 }

默认情况下,ORMLite会将枚举作为VARCHAR SQL字段中的字符串值(RED,GREEN,BLUE)保留。如果您有String字段,那么您应该将其保留为STRING类型。如果您想要存储其值,也可以使用DataType.ENUM_INTEGER但不建议出于向后兼容性原因。

如果您编辑问题以更好地解释您想要完成的内容,我可以编辑我的答案以提供更多信息。