2011-03-10 98 views
9

我正在使用ormlite for Android,我試圖獲得多列唯一約束。截至目前,我只能夠得到這樣的indiviudal列的唯一約束:如何在ormlite中實現多列唯一約束(SQLite)

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) 

有沒有辦法得到這個工作?

回答

14

如何使用

@DatabaseField (uniqueCombo = true) 
String myField; 

註釋,而不是 - 是它的uniqueIndexName在訪問表項時速度更快的事?

+0

如果您的版本> = 4.20,並且已於2011年4月30日添加,則這是正確的答案。 http://ormlite.com/changelog.txt。好找! – Pzanno 2011-08-22 21:03:37

+0

哦,謝謝:)但像我說的 - 也許灰色可以澄清,如果有性能趕上這一點。 – Ready4Android 2011-08-25 23:10:05

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; 

這將創建一個索引來完成唯一性,但我懷疑unique = true有一個隱藏的索引無論如何。請參閱該文檔:

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

我會考慮允許多個獨特的領域。可能不被所有數據庫類型支持。

+3

這些註釋可能與外部對象? – 2013-06-25 22:25:02