4

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

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

你有什么建议?

4

3 回答 3

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();会从标签表中删除与该模型关联的所有标签。你不必做任何额外的清理或任何事情。

于 2011-05-13T21:48:04.493 回答
3

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.

于 2016-11-17T13:21:15.983 回答
0

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; }
于 2013-10-29T17:21:56.723 回答