4

まず、ORMLiteは初めてです。モデルクラスに文字列のリストであるフィールドを持たせたいのですが、最終的にはモデルオブジェクトのタグのリストを保持します。どのORMLiteアノテーションを使用する必要がありますか?

まず、すべてのタグのテーブルを作成したくないので、を使用し@ForeignCollectionFieldます。また、@DatabaseField(dataType=DataType.SERIALIZABLE)アノテーションを使用することを考えましたが、インターフェイスList<String>が実装されていないことがわかりました。Serializable

あなたの提案は何ですか?

4

3 に答える 3

8

まず第一に、List は実装されていませんSerializableが、ArrayList は一般的なコレクションの実装のほとんどと同様に実装されています。しかし、純粋なオブジェクト モデルの観点から見ると、巨大なリストを保存することは、おそらく最善の方法ではありません。

では、すべてのタグのテーブルを作成したくないのはなぜですか? 純粋なモデルの観点からは、これが最善の方法です。毎回必要な場合は、2 番目のクエリが必要になります。これが hibernate がタグのリストまたは配列を保存する方法です。


@creen のコメントを読んだ後でも、タグの表が必要だと思います。モデルクラスは次のようになります。

@ForeignCollectionField
Collection<Tag> tags;

tagsテーブルには、それを参照する複数のモデル クラスで名前が付けられた単一のタグはありませんが、複数のエントリがあります。次のようになります。"red""red"

model_id    name
1           "red"
1           "blue"
2           "red"
3           "blue"
3           "black"

モデル オブジェクトを削除するときは常に、tags.clear();そのモデルに関連付けられているすべてのタグをタグ テーブルから削除することを最初に実行します。余分なクリーンアップなどを行う必要はありません。

于 2011-05-13T21:48:04.493 に答える
3

単純な文字列配列の @ForeignCollectionField に行く必要はありません

コードを変更する

@DatabaseField(dataType=DataType.SERIALIZABLE) 
List<String> users;

@DatabaseField(dataType = DataType.SERIALIZABLE)
String[] users;

データベースは、動的に拡張可能な配列を格納したくありません。これが、List ではなく string[] のような静的配列のみを許可する理由です。

于 2016-11-17T13:21:15.983 に答える
0

2 つのプロパティを追加しました... 1 つは csv 文字列としてデータベースに書き込まれ、もう 1 つはこれを変換します。

[Ignore]
public List<string> Roles
{
    get
    {
        return new List<string>(RolesCsv.Split(new char[] { ',' }));
    }
    set
    {
        RolesCsv = string.Join(",", value);
    }
}
public string RolesCsv { get; set; }
于 2013-10-29T17:21:56.723 に答える