2012-01-19 23 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