9

私は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 );

そして私が欲しいのは

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 )

これを機能させる方法はありますか?

4

2 に答える 2

14

使ってみませんか

@DatabaseField (uniqueCombo = true) 
String myField;

代わりに注釈-テーブル内のアイテムにアクセスするときにuniqueIndexNameが高速であるかどうかの問題ですか?

于 2011-08-19T22:55:59.837 に答える
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

複数の一意のフィールドを許可することを検討します。すべてのデータベースタイプでサポートされているとは限りません。

于 2011-03-10T22:29:54.773 に答える