주석 유형 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();
     
     
    위 예제에서 'Person'은 'dog' 필드를 통해 'Dog'와 관련이 있습니다. 이는 'Dog' 클래스와 'Person' 클래스 간에 암시적 역관계가 존재함을 의미합니다. 이 역관계는 공개되며 '@LinkingObject' 주석이 달린 'RealmResults' 필드에 의해 쿼리될 수 있습니다. 이를 통해 '개' 클래스의 '소유자' 필드를 수동으로 유지 관리할 필요 없이 개 소유자의 속성을 쿼리할 수 있습니다.

    연결 객체에는 다음과 같은 속성이 있습니다.

    • 이 링크는 Realm에서 유지 관리되며 관리 객체에 대해서만 작동합니다.
    • 이는 일반 관계처럼 쿼리할 수 있습니다.
    • 이는 일반 관계처럼 팔로우할 수 있습니다.
    • `copyToRealm()`을 수행할 때는 무시됩니다.
    • `copyFromRealm()`을(를) 수행할 때는 무시됩니다.
    • 다양한 `createObjectFromJson*` 및 `createAllFromJson*` 메서드를 사용할 때는 무시됩니다.
    • '@LinkingObject' 필드가 있는 객체의 리스너는 연결 객체가 변경되는 경우(예: 다른 객체가 이 객체에 대한 참고를 삭제하는 경우) 트igger되지 않습니다.

    또한 다음과 같은 제한 사항이 있습니다.

    • @Igore가 우선합니다. @Igore 필드에 있는 @LinkingObjects 주석은 무시됩니다.
    • 주석이 달린 필드는 @Required일 수 없습니다.
    • 주석이 달린 필드는 'final'이어야 합니다.
    • 주석 인수(역링크된 필드의 이름)는 필수입니다.
    • 주석 인수는 간단한 필드 이름이어야 합니다. 마침표('.')를 포함할 수 없습니다.
    • 주석이 달린 필드는 'RealmResults<T>' 유형이어야 하며, 여기서 T는 'RealmModel'을 확장하는 구체적인 클래스입니다.
    역방향 참고(위의 경우 'dog')의 소스가 'List'인 경우, 두 정방향 참고가 모두 동일한 객체에 대한 경우에도 각 정방향 참고에 대한 역방향 참고가 있습니다. 위의 `Person` 클래스가 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
      이 주석이 포함된 클래스의 인스턴스에 대한 관계가 포함된 필드의 이름입니다.
    • 요소 세부 정보

      • value

        문자열 값
        이 주석이 포함된 클래스의 인스턴스에 대한 관계가 포함된 필드의 이름입니다. 이 인수를 제공하지 않으면 주석 처리기가 IllegalArgumentException 와 함께 중단됩니다.
        기본값입니다:
        ""