2012-01-19 17 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] 

は、私は今、私、ormlite_config.txtを更新するDatabaseConfigUtilをrunnedクラス

@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; 
    ... 
} 

です唯一の解決策は、フィールドの型をStringに変更することだと思っています

答えて

5

ORMLiteサポートされているデータベースのSQL列挙型をサポートしていませんいくつかのデータベースタイプによってENUM_STRINGは、enum型を永続化することになっています。ような何か:それはVARCHAR SQLフィールドに(RED、GREEN、BLUE)文字列値だとしてデフォルトで

@DatabaseField 
private OurEnum udm; 
... 

public enum OurEnum { 
    RED, GREEN, BLUE; 
} 

、ORMLiteは、列挙型を持続します。 Stringフィールドがある場合は、それをSTRINGタイプとして永続化させるだけです。代わりにその値を保存する場合は、DataType.ENUM_INTEGERを使用することもできますが、下位互換性の理由から推奨されていません。

あなたが達成しようとしていることをよりよく説明するために質問を編集した場合は、私の答えを編集して詳細な情報を提供することができます。

+0

このコードでOurEnumはデータベース内でvarcharでなくenumになりますか? – max4ever

+0

答えとして、 'OurEnum'フィールドはデータベース内の' VARCHAR'としてデータベースに永続化されます。 ORMLiteは、いくつかのデータベースタイプでのみサポートされているデータベース列挙型をサポートしていません。 – Gray

関連する問題