Как сделать уникальное ограничение для нескольких столбцов в ormlite (SQLite) - PullRequest
9 голосов
/ 10 марта 2011

Я использую ormlite для Android и пытаюсь получить уникальное ограничение для нескольких столбцов.На данный момент я могу получить уникальное ограничение только для отдельных столбцов, например:

CREATE TABLE `store_group_item` (`store_group_id` INTEGER NOT NULL UNIQUE ,
    `store_item_id` INTEGER NOT NULL UNIQUE ,
    `_id` INTEGER PRIMARY KEY AUTOINCREMENT );

, и я хочу получить

CREATE TABLE `store_group_item` (`store_group_id` INTEGER NOT NULL ,
    `store_item_id` INTEGER NOT NULL ,
    `_id` INTEGER PRIMARY KEY AUTOINCREMENT,
    UNIQUE( `store_group_id`, `store_item_id` );

В моей модели, которую я используюследующие аннотации для уникальных столбцов:

@DatabaseField( unique = true )

Есть ли способ заставить это работать?

Ответы [ 2 ]

14 голосов
/ 20 августа 2011

Как насчет использования аннотации

@DatabaseField (uniqueCombo = true) 
String myField;

- это вопрос ускорения uniqueIndexName при доступе к элементам в таблице?

7 голосов
/ 11 марта 2011

Редактировать:

Как указывал @ Ready4Android, с тех пор в версии 4.20 добавлена ​​поддержка поля аннотации uniqueCombo.Вот документы:

http://ormlite.com/docs/unique-combo

Не должно быть различий в производительности между использованием этого механизма по сравнению с uniqueIndexName, упомянутым ниже.


Да.Вы не можете сделать это с тегом unique=true, но вы можете с уникальным индексом.

@DatabaseField(uniqueIndexName = "unique_store_group_and_item_ids")
int store_group_id;
@DatabaseField(uniqueIndexName = "unique_store_group_and_item_ids")
int store_item_id;

Это создаст индекс для достижения уникальности, но я подозреваю, что unique = true имеетв любом случае скрытый индекс.См. Документы:

http://ormlite.com/docs/unique-index

Я рассмотрю возможность использования нескольких уникальных полей.Может поддерживаться не всеми типами баз данных.

...