如何在ormlite中执行多列唯一约束(SQLite)

Pza*_*nno 9 sql sqlite unique-constraint ormlite

我正在使用Android的ormlite,我正在尝试获得多列唯一约束.到目前为止,我只能对这样的个别列进行独特约束:

CREATE TABLE `store_group_item` (`store_group_id` INTEGER NOT NULL UNIQUE ,
    `store_item_id` INTEGER NOT NULL UNIQUE ,
    `_id` INTEGER PRIMARY KEY AUTOINCREMENT );
Run Code Online (Sandbox Code Playgroud)

而我想要的是

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` );
Run Code Online (Sandbox Code Playgroud)

在我的模型中,我一直在使用以下注释用于唯一列:

@DatabaseField( unique = true )
Run Code Online (Sandbox Code Playgroud)

有没有办法让这个工作?

Rea*_*oid 14

如何使用

@DatabaseField (uniqueCombo = true) 
String myField;
Run Code Online (Sandbox Code Playgroud)

而是注释 - 访问表中的项目时,uniqueIndexName的速度是否更快?


Gra*_*ray 7

编辑:

正如@ 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;
Run Code Online (Sandbox Code Playgroud)

这将创建一个索引来完成唯一性,但我怀疑unique = true无论如何都有一个隐藏索引.查看文档:

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

我将考虑允许多个唯一字段.所有数据库类型可能都不支持.

  • 这些注释是否可能与异物对象? (3认同)