首先,我是 ORMLite 的新手。我希望我的模型类有一个字段,它是一个字符串列表,最终将保存我的模型对象的标签列表。我应该使用哪些 ORMLite 注释?
首先,我不想拥有所有标签的表格,然后使用@ForeignCollectionField
. 我也想过使用@DatabaseField(dataType=DataType.SERIALIZABLE)
注释,但事实证明List<String>
它没有实现Serializable
接口。
你有什么建议?
首先,我是 ORMLite 的新手。我希望我的模型类有一个字段,它是一个字符串列表,最终将保存我的模型对象的标签列表。我应该使用哪些 ORMLite 注释?
首先,我不想拥有所有标签的表格,然后使用@ForeignCollectionField
. 我也想过使用@DatabaseField(dataType=DataType.SERIALIZABLE)
注释,但事实证明List<String>
它没有实现Serializable
接口。
你有什么建议?
首先,List 没有实现Serializable
,但 ArrayList 确实和大多数常见的集合实现一样好。但是从纯对象模型的角度来看,存储一个巨大的列表可能不是最好的。
那么为什么不想要一个包含所有标签的表格呢?从纯模型的角度来看,这是最好的方法。如果您每次都需要它们,它将需要第二次查询。这就是hibernate存储标签列表或数组的方式。
在阅读了您的评论@creen 之后,我仍然认为您确实想要一张标签表。您的模型类将具有:
@ForeignCollectionField
Collection<Tag> tags;
该tags
表不会有一个标签"red"
,其中有多个引用它的模型类,而是多个"red"
条目。它看起来像:
model_id name
1 "red"
1 "blue"
2 "red"
3 "blue"
3 "black"
每当您删除模型对象时,您首先tags.clear();
会从标签表中删除与该模型关联的所有标签。你不必做任何额外的清理或任何事情。
No need to go for @ForeignCollectionField for simple String Array
Change your code
@DatabaseField(dataType=DataType.SERIALIZABLE)
List<String> users;
to
@DatabaseField(dataType = DataType.SERIALIZABLE)
String[] users;
Database doesn't want to store dynamically grow able arrays. That is the reason it allows only static array like string[] and not List.
I added two properties... one that gets written to the database as a csv string and the other that translates this:
[Ignore]
public List<string> Roles
{
get
{
return new List<string>(RolesCsv.Split(new char[] { ',' }));
}
set
{
RolesCsv = string.Join(",", value);
}
}
public string RolesCsv { get; set; }