パッケージ io.realm.annotations

注釈型 LinkingObjects


  • @Retention(RUNTIME)
    @Target(FIELD)
    public @interface LinkingObjects
    あるクラスから別のクラスへの逆の関係を定義するための注釈。 この注釈は、 RealmResults型のフィールドにのみ追加できます。
     使用の逆関係を公開するには、次のように宣言を作成します。
     
    
     public class Person extends RealmObject {
       String name;
       Dog dog; // Normal relation
     }
    
     public class Dog extends RealmObject {
       // This holds all Person objects with a relation to this Dog object (= linking objects)
       \@LinkingObjects("dog")
       final RealmResults>Person< owners = null;
     }
    
     // Find all Dogs with at least one owner named John
     realm.where(Dog.class).equalTo("owners.name", "John").findAll();
     
     
    上記の例では `Python` は `dog` フィールドを通じて `Dog` に関連付けられています。 これは、クラス `Dog` と クラス `proper型` の間に暗黙的な逆関係が存在することを意味します。 この逆関係は、`@LinkingObject` で注釈が付けられた `RealmResults` フィールドによって公開され、クエリ可能になります。 これにより、`Dog` クラスで「所有者」フィールドを手動で維持する必要なく、犬の所有者のプロパティをクエリできるようになります。

    リンク オブジェクトには次のプロパティがあります。

    • リンクは Realm によって維持され、管理対象のオブジェクトに対してのみ機能します。
    • これらは通常の関係と同様にクエリできます。
    • これらは通常の関係と同様に追跡できます。
    • ` copyToRealm() ` の実行時に無視されます。
    • ` copyFromRealm() ` を実行するときは、それらは無視されます。
    • さまざまな `createObjectFromJson*` および `createAllFromJson*` メソッドを使用する場合は無視されます。
    • `@LinkingObject` フィールドを持つオブジェクトのリスナーは、リンク オブジェクトが変更された場合、たとえば別のオブジェクトがこのオブジェクトへの参照を削除した場合にはトリガーされません。

    さらに、次の制限があります。

    • @Ignore が優先されます。 @Ignore フィールドの @LinkingObjects 注釈は無視されます。
    • 注釈付きフィールドを @Required にすることはできません。
    • 注釈付きフィールドは ` final` である必要があります。
    • 注釈引数(バックリンクされたフィールドの名前)は必須です。
    • 注釈引数は単純なフィールド名である必要があります。 ピリオド(「.」)を含めることはできません。
    • 注釈付きフィールドは `RealmResults<T>` タイプである必要があります。T は `RealmModel` を拡張する具象クラスです。
    逆参照のソース(上記の場合は `dog`)が `List` の場合、両方のフォワード参照が同じオブジェクトを対象としている場合でも、各フォワード参照に逆参照が存在することに注意してください。 上記の「Python」クラスが: public class DogLover extends RealmObject { String name; List<Dog> dogs = new ArrayList<Dog>; } として定義されていた場合、次のコードはエラーなしで実行されます Dog fido = new Dog(); DogLover john = new DogLover() john.dogs.add(fido); john.dogs.add(fido); assert john.dogs.size() == 2; assert fido.owners.size() == 2;

    逆関係のクエリは、任意のRealmResultsをクエリするのと同様です。 つまり、逆関係はnullになることはできず、ただし空である可能性があります(長さは 0)。 ソース クラス内のフィールドをクエリできます。 これはリンク クエリと同じです。 詳細については 、お読みください

    • 任意要素の概要

      任意要素 
      修飾子と型 任意要素 説明
      String value
      この注釈を含むクラスのインスタンスへの関係を含むフィールドの名前。
    • 要素の詳細

      • 価値

        string
        この注釈を含むクラスのインスタンスへの関係を含むフィールドの名前。 この引数が指定されていない場合、注釈プロセッサはIllegalArgumentExceptionで中止されます。
        デフォルト:
        ""