Entity

Entity

Una entidad en jmoordb es una clase en Java que representa un documento en una base de datos NoSQL, con sus atributos y relaciones.

Jmoordb ofrece una serie de anotaciones que nos permiten definir nuestras entidades de manera que podamos indicar fácilmente las características del mismo.

Diseño:

Definir los atributos:

Se representan por tipos de datos en Java que estarán asociados a las propiedades de los documentos.

por ejemplo:

private Integer id; representa el campo id de tipo entero en el documento en la base de datos.

Ejemplos

Ejemplo de un Entity Básico

El @Id define el atributo idplaneta como campo llave, y @Ignore indica que el atributo fecha sera ignorado como parte del documento.

No es necesario generar los métodos get/set ya que la anotación @Getter/@Setter las generan.

Entity

@Getter
@Setter
public class Planetas {
@Id
private String idplaneta;
private String planeta;
@Ignore
private Date fecha;
public Planetas() {
}
}

Controller

Adelantaremos un poco indicando como seria un clase controller que utiliza repository para guardar el documento en base al entity, más adelante mostrare como definir un repository, por ahora es a modo de ejemplo rápido.

Planetas planetas = new Planetas("tr", "Tierra", new Date());

planetasRepository.save(planetas);

Documento

El documento en la colección de la base de datos NoSQL tendría la siguiente representación.

Planetas{ "_id" : ObjectId("587cf876a6cca92842bf2ea9"),

"idplaneta" : "tr",

"planeta" : "Tierra"

}

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 deserializarlo respectivamente, se define mediante la anotación @Referenced.

Si has utilizado un modelo relacional @Referenced es una forma de manejar relaciones entre documentos.

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

| Atributo | Descripción |
| :--- | :--- |
| document | Nombre del documento relacionado |
| field | Nombre del campo llave que identifica al documento en el colección. |
| javatype | Indica el tipo de datos de la llave primaria.   **String**: Tipo predeterminado de la llave primaria.                                                                    ** Integer:** Tipo de dato entero 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.          **true**:  Indica que no se busque en las colecciones referenciadas, es una búsqueda más rápida pero solo se cargara el campo llave en los documentos referenciados. |
|  |  |

Ejemplos de definición de @Referenced lazy

lazy= false (valor predeterminado)

Devolverá los entitys relacionados con la información de los documentos referenciados.

Continentes{idcontinente=oc, continente=Oceania, planetas=[Planetas{idplaneta=tierra, planeta=Tierra}, Planetas{idplaneta=marte, planeta=Marte}]}

lazy= true (no buscar en documentos referenciados)

Solo devolverá el valor de los campos llaves referenciados, los demás atributos serán null.

Continentes{idcontinente=oc, continente=Oceania, planetas=[Planetas{idplaneta=tierra, planeta=null}, Planetas{idplaneta=marte, planeta=null}]}

Ejemplo de un documento @Referenced

Entity

@Getter
@Setter
public class Continentes {
@Id
private String idcontinente;
private String continente;
@Referenced(collection = "Planetas", field = "idplaneta",javatype="String", lazy = false, repository="com.avbravo.repository.PlanetasRepository")
private Planetas planetas;
}

Controller

Continentes continentes = new Continentes();
continentes.setIdcontinente("am");
continentes.setContinente("America");


Planetas planetas = new Planetas();
planetas.setIdplaneta("tr");
Planetas  p1 = planetasRepository.findBy(planetas);
ontinentes.setPlanetas(p1);
if (continentesRepository.save(continentes)) { }

Documento Generado

Nota: Solo se almacena el valor del atributo relacionado, en el ejemplo idplaneta.

{ "_id" : ObjectId("587e73eba6cca93639449808"),
    "idcontinente" : "am",
    "continente" : "America",
    "planetas" : {
           "idplaneta" : "tr"
    }
}

Listas Referenciadas

Una lista referenciada es una lista de documentos que solo se almacena la llave primaria y que son usadas como referencia para cargar automáticamente el contenido del documento referenciado.

Entity

@Getter
@Setter
public class Continentes {

@Id
private String idcontinente;
private String continente;
@Referenced(collection = "Planetas",field = "idplaneta",javatype="String",lazy=false, repository="com.avbravo.repository.PlanetasRepository")

private List<Planetas> planetas;
}

Controller

Continentes continentes = new Continentes();
continentes.setIdcontinente("am");
continentes.setContinente("America");


Planetas planetas = new Planetas();
planetas.setIdplaneta("tr");
Planetas  p1 = planetasRepository.findBy(planetas);

Planetas  p2 = planetasRepository.findById(new Document("idplaneta","mr");
Planetas  p3 = planetasRepository.findById(new Document("idplaneta","jp");

List<Planetas> list = new ArrayList<>();
list.add(p1);
list.add(p2);
list.add(p3);
continentes.setPlanetas(list);
if (continentesRepository.save(continentes)) {

}

Documento Generado

{ "_id" : ObjectId("587e7747a6cca937ac6fb6bf"),
    "idcontinente" : "am",
    "continente" : "America",
    "planetas" : [
            {
                   "idplaneta" : "tr"
            },
            {
                    "idplaneta" : "mr"
            },
            {
                    "idplaneta" : "jp"
            }
    ]
}

Listas de Objetos Java

Para definir listas de objetos Java no se utilizara ninguna anotación. Solo se declara List<> de tipos de datos Java

(String, Integer, Double

Entity

@Getter

@Setter

public class Continentes {

  @Id

  private String idcontinente;

  private String continente;

  private List<String> ciudades;
}

Controller

Continentes continentes = new Continentes();

continentes.setIdcontinente("am");

continentes.setContinente("America");


 List<String> list = new ArrayList<>();

        list.add("Panama");

        list.add("Los Santos");


 continentes.setCiudades(list);

 continentesRepository.save(continentes);

Documento

{
    "_id" : ObjectId("587ec427b2a08a14f778b0f1"),
    "idcontinente" : "am",
    "continente" : "America",
    "ciudades" : [
            "Panama",
            "Los Santos"
    ]
}

Last updated