使用ORMLite获得数据库中表示的字符串列表

时间:2011-05-13 20:17:42

标签: ormlite

首先,我是ORMLite的新手。我希望我的模型类有一个字段,它是一个字符串列表,最终会保存我的模型对象的标签列表。 我应该使用哪些ORMLite注释?

首先,我不想拥有所有标签的表格,然后使用@ForeignCollectionField。 我还考虑使用@DatabaseField(dataType=DataType.SERIALIZABLE)注释,但事实证明List<String>没有实现Serializable接口。

你有什么建议?

3 个答案:

答案 0 :(得分:8)

首先,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();,这将从标记表中删除与该模型关联的所有标记。你不需要做任何额外的清理工作。

答案 1 :(得分:3)

无需为@ForeignCollectionField寻找简单的String Array

更改您的代码

@DatabaseField(dataType=DataType.SERIALIZABLE) 
List<String> users;

@DatabaseField(dataType = DataType.SERIALIZABLE)
String[] users;

数据库不想存储动态增长的数组。这就是它只允许像string []这样的静态数组而不是List。

的原因

答案 2 :(得分:0)

我添加了两个属性...一个以csv字符串形式写入数据库,另一个用于翻译:

[Ignore]
public List<string> Roles
{
    get
    {
        return new List<string>(RolesCsv.Split(new char[] { ',' }));
    }
    set
    {
        RolesCsv = string.Join(",", value);
    }
}
public string RolesCsv { get; set; }