Как сделать уникальное ограничение для нескольких столбцов в ormlite (SQLite)

Я использую 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 )

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


person Pzanno    schedule 10.03.2011    source источник


Ответы (2)


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

@DatabaseField (uniqueCombo = true) 
String myField;

вместо этого используйте аннотацию - дело в том, что uniqueIndexName работает быстрее при доступе к элементам в таблице?

person Ready4Android    schedule 19.08.2011
comment
Это правильный ответ, если у вас версия ›= 4.20, добавленная 30.04.2011. ormlite.com/changelog.txt. Хорошая находка! - person Pzanno; 23.08.2011
comment
О, спасибо :) но, как я уже сказал, может быть, Грей мог бы уточнить, есть ли в этом улов производительности. - person Ready4Android; 26.08.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

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

person Gray    schedule 10.03.2011
comment
возможны ли эти аннотации с посторонними объектами? - person B. TIger; 26.06.2013