Busquedas @Referenced

Documentos Referenciados

Un documento referenciado en jmoordb es un documento que guarda solo la referencia al campo llave del otro documento, de manera que no se almacene el contenido del documento referenciado dentro de el. El framework, realiza las operaciones para serializar y deserializar respectivamente.

Los resultados serán diferentes dependiendo del atributo lazy definido en la anotación @Referenced()

Anotación:

@Referenced(collection="", field="",javatype="",lazy="",repository="com.mypaquete.EntityRepository")

collection: Es el nombre de la coleccion referenciada

field: Nombre del campo llave que identifica al documento en una coleccion

javatype: Indica el tipo de datos de la llave primaria.

String: Tipo predeterminado de la llave primaria.

Integer: Para tipo de datos Integer de la llave primaria

lazy: Indica si se debe recorrer o no los documentos en las colecciones referenciados.

false: Indica que al buscar en una Colección buscara en la colección relacionada.

Continentes{idcontinente=oc, continente=Oceania, planetas=[Planetas{idplaneta=tierra, planeta=Tierra, fecha=null}, Planetas{idplaneta=marte, planeta=Marte, fecha=null}]}
true: Solo devolverá el valor del campo relacionado los demás atributos seran null.

Continentes{idcontinente=oc, continente=Oceania, planetas=[Planetas{idplaneta=tierra, planeta=null, fecha=null}, Planetas{idplaneta=marte, planeta=null, fecha=null}]}
repository: Indicar el paquete y nombre del Repository referenciado.

Ejemplo de Colecciones

Colección planetas{

    "_id" : ObjectId("5883d0e6b2a08a172497328e"),

    "idplaneta" : "tierra",

    "planeta" : "Tierra",

    "fecha" : ISODate("2017-01-21T21:21:42.044Z")

}

Colección continentes{

    "_id" : ObjectId("58841d5ab2a08a0eabd8a85b"),

    "idcontinente" : "oc",

    "continente" : "Oceania",

    "planetas" : {

            "idplaneta" : "tierra"

    }

}

Ejemplo: lazy = false Busca en los Documentos relacionados

Entity

@Getter

@Setter

public class Continentes {

@Id

private String idcontinente;

private String continente;

@Referenced(collection = "Planetas",field = "idplaneta",javatype = "String",lazy =false,facade = "com.avbravo.jmoordbexamples.ejb.PlanetasFacade")

private Planetas planetas;

@Override

public String toString() {

    return "Continentes{" + "idcontinente=" + idcontinente + ", continente=" + continente + ", planetas=" + planetas + '}';

}
}

Controller

    Optional<Continentes> c = continentesRepository.find(new Document("idcontinente", "oc"));

    if (!c.isPresent()) {

        System.out.println("No hay un continente con ese codigo");

    } else {

        System.out.println("" + c.get().toString());

    }

Salida:

Continentes{idcontinente=oc, continente=Oceania, planetas=Planetas{idplaneta=tierra, planeta=Tierra, fecha=Sat Jan 21 16:21:42 EST 2017}}

Ejemplo lazy = true No Busca en los Documentos relacionados

Entity

@Getter

@Setter

public class Continentes {

@Id

private String idcontinente;

private String continente;

@Referenced(collection = "Planetas",field = "idplaneta",javatype = "String",lazy =false,facade = "com.avbravo.jmoordbexamples.ejb.PlanetasFacade")

private Planetas planetas;

@Override

public String toString() {

    return "Continentes{" + "idcontinente=" + idcontinente + ", continente=" + continente + ", planetas=" + planetas + '}';

}
}

Controller

Optional<Continentes> c = continentesRepository.find(new Document("idcontinente", "oc"));

    if (!c.isPresent()) {

        System.out.println("No hay un continente con ese codigo");

    } else {

        System.out.println("" + c.get().toString());

    }

Salida:

Continentes{idcontinente=oc, continente=Oceania, planetas=Planetas{idplaneta=tierra, planeta=null, fecha=null}}

Last updated