Realm banco de dados (Java) usando o documento (Relacionamentos)


Realm (Java) de banco de dados usando o documento (diretório)

Você pode usar quaisquer dois RealmObject ligados entre si. No Reino da relação é muito leve: links de velocidade de avanço em termos de memória ou não ter muitos recursos. Vamos explorar Realm permite definir diferentes tipos de relações entre objetos.

Muitos-5.1

Para criar relacionamento "muitos" ou "12:59", por favor, dê um atributo modelo cujo tipo é uma das suas subclasses RealmObject:

public class Email extends RealmObject {
    private String address;
    private boolean active;
}

public class Contact extends RealmObject {
    private String name;
    private Email email;
}

Contact bob = realm.createObject(Contact.class);
bob.name = "Bob Newhart";

Email email1 = realm.createObject(Email.class);
email1.address = "[email protected]";

bob.email = email1;

Cada contato tem zero ou uma instância de e-mail. Nada pode parar você irá usar os mesmos objetos e-mail com vários contatos; a diferença entre o relacionamento muitos-para-um e o relacionamento depende de sua lógica de negócios.

O campo de relacionamento definido para limpar a referência ao nulo:

bob.email = null;

Isto irá remover a relação entre o bob e email1, mas EMAIL1 ainda no reino.

5.2-muitos

Você pode RealmList <T>criar um relacionamento com qualquer número de objetos a partir de uma única instrução campos de objeto. Vamos reescrever o exemplo para suportar múltiplos endereços de e-mail:

public class Contact extends RealmObject {
    public String name;
    public RealmList<Email> emails;
}

public class Email extends RealmObject {
    public String address;
    public boolean active;
}

RealmLists é RealmObjects recipiente; comportam realmlist como regulares Lista Java. Você pode usar o mesmo objeto em diferentes RealmLists e pode usar o objeto sobre a "muitos" e "muitos para muitos" modelagem de relacionamento.

realm.executeTransaction(new Realm.Transaction() {
    @Override
    public void execute(Realm realm) {
        Contact contact = realm.createObject(Contact.class);
        contact.name = "John Doe";

        Email email1 = realm.createObject(Email.class);
        email1.address = "[email protected]";
        email1.active = true;
        contact.emails.add(email1);

        Email email2 = realm.createObject(Email.class);
        email2.address = "[email protected]";
        email2.active = false;
        contact.emails.add(email2);
    }
});

Ele pode declarar uma relação recursiva, o que é útil quando certos tipos de dados de modelação.

public class Person extends RealmObject {
    public String name;
    public RealmList<Person> friends;
    // 其他字段...
}

Defina o campo realmlist valor como nulo para limpar a lista. Lista estará vazia (comprimento zero), mas a lista não remove o objeto do Reino. Realmlist-getter nunca vai retornar nulo: o objeto é retornado é sempre uma lista. O comprimento pode ser igual a zero.

5.3 relação inversa

Relacionamento é unidirecional. Pessoa e Dog com essas duas classes, por exemplo:

public class Dog extends RealmObject {
    private String name;
    private int age;
}

public class Person extends RealmObject {
    @PrimaryKey
    private long id;
    private String name;
    private RealmList<Dog> dogs;
}

Você pode clicar em um link de "povo" para "cão", mas não a partir do "cão" a seu objeto "pessoas". Você pode resolver este problema, fornecendo @LinkingObjects anotados como cão.

public class Person extends RealmObject {
  private String id;
  private String name;
  private RealmList<Dog> dogs;
  // getters and setters
}

public class Dog extends RealmObject {
  private String id;
  private String name;
  private String color;
  @LinkingObjects("dogs")
  private final RealmResults<Person> owners;
  // getters and setters
}

Oferecemos um campo proprietário do cão, e especificar que o campo deve conter todos os objetos pessoa do cão com este objeto em seus cães de campo.

campo anotado deve ser declarado final, e deve ser RealmResults <T>do tipo, em que T é a extremidade oposta tipo de parentesco / classe. Uma vez que a relação é de muitos para muitos ou, portanto, seguem a relação inversa pode resultar em zero, um ou mais objectos.

Como qualquer outro RealmResultsconjunto do mesmo, você pode consultar uma relação inversa.

5.4 lista primitivo (Listas de primitivas)

Realm classe Modelo pode conter uma lista de tipos de dados primitivos. Ele deve ser usado RealmList <T>para modelagem, onde T pode ser dos seguintes tipos: String, Integer, Boolean, Float, Double, Short, Long, Byte, byte[]e Date.

public class Person extends RealmObject {
  public String name;
  public RealmList<String> children = new RealmList<>();
}

E RealmModeluma lista diferente, uma lista de primitivas pode conter um valor nulo. Se você não permitir valores nulos, use a @Requiredanotação:

public class Person extends RealmObject {
  public String name;
  @Required
  public RealmList<String> children = new RealmList<>();
}

lista primitiva não suporta lista e uma lista de consultas.

Antes Realm Java 4.0.0, geralmente usam um determinado Realm <String / Int>classe lista de primitivas de modelagem. Você pode usar o seguinte método para migrar para o código de migração da lista primitiva:

// Model classes
public class RealmString extends RealmObject {
  public String value;
}

public class Person extends RealmObject {
  public String name;
  @Required
  public RealmList<String> children = new RealmList<>();
}

// Migration code
RealmObjectSchema objSchema = realmSchema.get("Person");
objSchema.addRealmListField("children_tmp", String.class)
        .setRequired("children_tmp", true)
        .transform(new RealmObjectSchema.Function() {
            @Override
            public void apply(DynamicRealmObject obj) {
                RealmList<DynamicRealmObject> children = obj.getList("children");
                RealmList<String> migratedChildren = obj.getList("children_tmp", String.class);
                for (DynamicRealmObject child : children) {
                    migratedChildren.add(child.getString("value"));
                }
            }
        })
        .removeField("children")
        .renameField("children_tmp", "children");
Publicado 59 artigos originais · Louvor obteve 88 · vista 190 000 +

Acho que você gosta

Origin blog.csdn.net/geofferysun/article/details/105102526
Recomendado
Clasificación