[英]Android Room Database: How to handle Arraylist in an Entity?
[英]How to store an arraylist data in room database in android studio
我是 android 工作室的初学者,想在房间数据库中存储语言的数组列表。 有人可以建议我怎么做吗?
您可以创建一个带有@Entity
注释的 class ,因此您将拥有一个语言表。 例如
@Entity
class Language {
@PrimaryKey
Long id = null;
String language;
}
然后,使用 @Database 注释的 class 将在实体列表中定义语言 class 作为@Database 注释的一部分。
然后,您将通过使用它的 id 列值来引用一种语言。 如果使用该语言的任何内容都具有单一语言(一个(语言)-多个(该语言的用户)关系),那么您将有一列引用(映射/关联/关联)所使用的语言,例如
@Entity(
// Optional but enforces referential integrity
foreignKeys = {
@ForeignKey(
entity = Language.class,
parentColumns = {"languageId"},
childColumns = {"languageReference"},
// Optional within Foreign Key manage deletion of parent by automatically deleting children
// i.e. deletions are cascaded to the children
onDelete = CASCADE,
// Optional within Foreign Key manage update of parent column/columns that are referenced
onUpdate = CASCADE
)
}
)
class ObjectThatUsesALanguage {
@PrimaryKey
Long ObjectThatUsesALanguageId = null;
@ColumnInfo(index = true) // optional but recommended index
long languageReference; //<<<<< The single language used
}
如果无论使用什么语言,都可以有多种语言,那么对于多对多关系,您可以有一个关联/引用/映射表,其中至少有两列,一列用于引用该语言,另一列用于引用该语言的用户。 该语言的用户将是一个相对简单的表格,没有参考。 所以你可以: -
@Entity
class ObjectThatUsesManyLanguages {
@PrimaryKey
Long ObjectThatUsesManyLanguagesId = null;
}
和
@Entity(
primaryKeys = {"ObjectThatUsesManyLanguagesReference","LanguageReference"},
foreignKeys = {
@ForeignKey(
entity = ObjectThatUsesManyLanguages.class,
parentColumns = {"ObjectThatUsesManyLanguagesId"},
childColumns = {"ObjectThatUsesManyLanguagesReference"},
onDelete = CASCADE,
onUpdate = CASCADE
),
@ForeignKey(
entity = Language.class,
parentColumns = {"languageId"},
childColumns = {"LanguageReference"}
)
}
)
class ObjectThatUsesManyLanguagesToLanguageReference {
long ObjectThatUsesManyLanguagesReference;
@ColumnInfo(index = true)
long LanguageReference;
}
但是,对于多对多关系,您需要一个 POJO(或 POJO)来检索语言用户以及语言(和/或反之亦然)
例如
class ObjectThatUsesManyLanguagesWithLanguages {
@Embedded
ObjectThatUsesManyLanguages objectThatUsesManyLanguages;
@Relation(
entity = ObjectThatUsesManyLanguages.class,
parentColumn = "ObjectThatUsesManyLanguagesId",
entityColumn = "languageId",
associateBy = @Junction(
value = ObjectThatUsesManyLanguagesToLanguageReference.class,
parentColumn = "ObjectThatUsesManyLanguagesReference",
entityColumn = "LanguageReference"
)
)
List<Language> languageList;
}
说许多人倾向于忽略正确/推荐的数据库使用(规范化),而只是想要一个对象列表作为一列。
例如(不能使用)之类的东西:-
@Entity
class ObjectThatUsesAListOfManyLanguages {
@PrimaryKey
long id;
List<Language> languageList;
}
如上所述不能使用,列不能是列表/数组
但是,可以通过使用“持有人” class 来克服它,例如
class LanguageHolder {
List<Language> languageList;
}
和这个结合:-
@Entity
class ObjectThatUsesAListOfManyLanguages {
@PrimaryKey
long id;
LanguageHolder languages;
}
BUT TypeConverters 然后需要将语言对象列表转换为可以存储的列类型。 通常这将是列表的 JSON 字符串表示形式。
使用这种技术,不需要/使用 Language 表,因此如果使用 Language 对象/类,则不需要(不应该)用 @Entity 注释。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.