安卓 ORMlite - 存储字符串数组

4

我希望将一个包含字符串数组的类持久化。如何在ormlite中实现? 例如,

class A {
    int age;
    String[] childrenNames = new String[2];
}
3个回答

10

首先你需要将类序列化。你可以选择通过注释在类顶部添加表名。

然后对于变量,你必须添加数据库字段注释。对于字符串数组,你还需要将其注释为Serializable数据类型。你将得到以下内容:

@DatabaseTable(tableName = "A")
Class A implements Serializable{

    @DatabaseField
    int age

    @DatabaseField(dataType = DataType.SERIALIZABLE)
    String[] childrenNames = new String[2];
}

同时不要忘记为每个变量创建getter和setter。


12
在类A上进行序列化操作对问题没有帮助,反而具有误导性。 - Gray
为什么A类必须是可序列化的? - Bhargav
没有必要让A扩展Serializable。 - Guilherme Campos Hazan

3
我希望持久化一个包含字符串数组的类,如何在ormlite中实现?例如,
您可以将其存储为序列化流。
但是,更好的方法是使用ForeignCollection。ORM库不支持数组,不像其他ORM库一样具有魔力。也许它应该。与此同时,这是关于设置另一个表来存储子名称的文档:

http://ormlite.com/docs/foreign-collection

一张表用于 A。另一张表用于 ChildrenName。每个 ChildrenName 实体都会有一个外键字段 A,该字段将显示每个名称对应的哪个 A


1
外部集合似乎不涵盖“多对多”的情况。 仍然可能希望存储外键行ID的数组。 - S.D.

2

@Gray 告诉了更好的方法。

@ForeignCollectionField(eager = false) ForeignCollection orders;

根据文档: 在上面的示例中,@ForeignCollectionField注释标记orders字段是与账户匹配的订单集合。

orders字段的类型必须是ForeignCollection或Collection - 不支持其他集合,因为它们太重且有许多需要支持的方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接