2012-01-19 26 views
0

你好,我正在使用ORMLite 4.33。ormlite DataType.ENUM_STRING让我“对数据持久存储器无效”

我有一个实体类试图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 [email protected] 

这里是类

@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,现在我认为唯一的解决办法是将字段的类型改为字符串

回答

5

ORMLite不支持只支持的数据库SQL枚举列d由几个数据库类型。 ENUM_STRING应该保留一个枚举类型。喜欢的东西:

@DatabaseField 
private OurEnum udm; 
... 

public enum OurEnum { 
    RED, GREEN, BLUE; 
} 

默认情况下,ORMLite然后将坚持枚举,因为它在一个VARCHAR SQL字段的字符串值(红,绿,蓝)。如果你有一个String字段,那么你应该让它保持为STRING类型。如果您想存储它的值,也可以使用DataType.ENUM_INTEGER,但建议不要出于向后兼容的原因。

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

+0

所以使用这段代码在数据库中,OurEnum变成varchar而不是enum了? – max4ever

+0

正如答案所述,'OurEnum'字段将作为数据库中的'VARCHAR'持久保存在数据库中。 ORMLite不支持仅由几种数据库类型支持的数据库枚举。 – Gray