如何将原始类型(String)的集合存储到数据库中

时间:2013-04-24 10:57:52

标签: android android-sqlite ormlite primitive-types foreign-collection

我试图使用ORMLite将我的类映射到SQLite数据库,但是我很难存储String的集合我有这个错误:

java.lang.IllegalArgumentException: No fields have a DatabaseField annotation in
     class java.lang.String

这个错误是自解释的但是我如何存储字符串集合应该扩展String类并添加所需的注释以便这样做? 在该字段的注释中我添加了datatype.serializable但是它也不起作用。 这是我的课程,我遇到了问题:

@DatabaseTable(tableName = "parameters")

public class Parameters {

    // id is generated by the database and set on the object automagically
    @DatabaseField(generatedId = true)
    int id_parameters;

    @DatabaseField(canBeNull = true)
    @JsonProperty("id")
    private Integer id;

    @DatabaseField(canBeNull = false)
    @JsonProperty("account_id")
    private Integer account_id;

    @ForeignCollectionField
    @JsonProperty("languages")
    private Collection<String> languages;
    ...
}

有问题的字段是语言!

1 个答案:

答案 0 :(得分:4)

是的,你不能只做一个字符串集合。您需要创建一个包含String字段的包装类以及外部Parameters字段:

public class Language {
    @DatabaseField(generatedId = true)
    int id;
    @DatabaseField
    String language;
    @DatabaseField(foreign = true)
    Parameters parameters;
}

这是来自FM的description of foreign collections。引用:

  

请记住,当您拥有ForeignCollection字段时,集合中的类必须(在此示例中为Order)必须具有包含该集合的类的外部字段(在此示例中为Account)。如果Account有一个外国的Orders集合,那么Order必须有一个Account外部字段。这是必需的,因此ORMLite可以找到与特定帐户匹配的订单。