Наличие списка строк, представленных в базе данных с использованием ORMLite - PullRequest
3 голосов
/ 14 мая 2011

Сначала я новичок в ORMLite. Я хотел бы, чтобы у моего модельного класса было поле, представляющее собой список строк, который в конечном итоге содержал бы список тегов для моего модельного объекта. Какие аннотации ORMLite я должен использовать?

Во-первых, я не хочу иметь таблицу всех тегов, а затем использовать @ForeignCollectionField. Также я подумал об использовании аннотации @DatabaseField(dataType=DataType.SERIALIZABLE), но оказалось, что List<String> не реализует интерфейс Serializable.

Каковы ваши предложения?

Ответы [ 3 ]

8 голосов
/ 14 мая 2011

Прежде всего, List не реализует Serializable, но ArrayList, конечно, делает так же, как и большинство реализаций коллекций.Но хранение огромного списка, вероятно, не лучший способ сделать это с точки зрения чистой объектной модели.

Так почему же вы не хотите иметь таблицу всех тегов?Это лучший способ с точки зрения чистой модели.Это потребует 2-го запроса, если они вам нужны каждый раз.Именно так hibernate будет хранить список или массив тегов.


После прочтения вашего комментария @creen, я все же думаю, что вы do хотите получить таблицу тегов.В этом случае ваш класс модели будет иметь:

@ForeignCollectionField
Collection<Tag> tags;

Таблица tags будет , а не иметь единственный тег с именем "red" с несколькими ссылками на классы моделей, но несколькими записями "red",Это будет выглядеть так:

model_id    name
1           "red"
1           "blue"
2           "red"
3           "blue"
3           "black"

Каждый раз, когда вы удаляете объект модели, вы сначала делаете tags.clear();, который удаляет все теги, связанные с этой моделью, из таблицы тегов.Вам не нужно было бы делать дополнительную очистку или что-либо еще.

3 голосов
/ 17 ноября 2016

Не нужно переходить на @ForeignCollectionField для простого String Array

Измените код

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

на

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

База данных не хочет хранить динамическирасти в состоянии массивы.По этой причине он допускает только статический массив, такой как string [], а не List.

0 голосов
/ 29 октября 2013

Я добавил два свойства ... одно, которое записывается в базу данных в виде строки 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; }
...