Skip to main content

List<> Embedidas en MongoDB con JMoordb

Las listas embebidas en los documentos en MongoDB nos permiten almacenar muchas estructuras que nos serán útil en variadas condiciones.
Usaremos JMoordb que esta disponible en los repositorios.

<repositories>
  <repository>
      <id>jitpack.io</id>
      <url>https://jitpack.io</url>
  </repository>
 </repositories>
 <dependency>
     <groupId>com.github.User</groupId>
     <artifactId>Repo</artifactId>
     <version>Tag</version>
 </dependency>




En este ejemplo básico asumimos que deseamos guardar un registro de la fecha hora  y descripción de las operaciones que realiza un usuario sobre un documento.


Definimos los entity

@Getter
@Setter
public class Userinfo {
    @Id
    private String username;
    private Date datetime;
    private String description;

    public Userinfo() {
    }

    public Userinfo(String username, Date datetime, String description) {
        this.username = username;
        this.datetime = datetime;
        this.description = description;
    }

}


El entity bodega contiene un List<> embebido de Userinfo

@Getter
@Setter
public class Bodega {

    @Id
    private String idbodega;
    private String telefono;
    private String direccion;

    @Embedded
    private List<Userinfo> userinfo;
    public Bodega() {
    }
  }


Crear un EJB llamado UserinfoServices
@Stateless
public class UserinfoServices {

    public List<Userinfo> generateListUserinfo(String username, String description) {
        List<Userinfo> listUserinfo = new ArrayList<>();
        try {

            listUserinfo.add(new Userinfo(username, JsfUtil.getFechaHoraActual(), description));
        } catch (Exception e) {
            JsfUtil.errorMessage("generateUserinfo() " + e.getLocalizedMessage());
        }
        return listUserinfo;
    }
}



Desarrollamos una aplicación Java Server Faces


En el controller metodo save()
@Inject
UserinfoServices userinfoServices;
public String save() {
        try {
            //Lo datos del usuario

 bodega.setUserinfo(userinfoServices.generateListUserinfo(loginController.getUsername(), "create"));
              bodegaFacade.save(bodega);
               
        } catch (Exception e) {
            JsfUtil.errorMessage("save()" + e.getLocalizedMessage());
        }
        return "";
    }

Método editar agregamos a la lista el nuevo objeto de tipo Userinfo
public String edit() {
        try {
         bodega.getUserinfo().add(userinfoServices.generateUserinfo(loginController.getUsername(),"editado"));
            bodegaFacade.update(bodega);
            JsfUtil.successMessage(rf.getAppMessage("info.update"));
        } catch (Exception e) {
            JsfUtil.errorMessage("edit()" + e.getLocalizedMessage());
        }
        return "";
    }// </editor-fold>


Si consultamos el documento en MongoDB


si observamos userinfo tiene 3 elementos, indican las operaciones sobre el documento.

se muestran los registros de las operaciones realizadas sobre el documento.








Comments

Popular posts from this blog

JUnit con DataClassG

JUnit con DataClassG 0. ESQUEMA Services: Por cada beans crearemos una clase Services que se encargará de interactuar con el controller para realizar las operaciones de la base de datos. Se crearan los métodos insert, update,delete y los demas metodos para realizar las diversas operaciones. Test: Se crearán las clases para test de las clases Services. Form: Los formularios para la interactuar con el usuario. ProvinciasServices.java colocamos los métodos, insert, update,delete public class ProvinciasServices {    ProvinciasController provinciasController = new ProvinciasController();    public ProvinciasServices() {    }    public Boolean insert (Provincias provincias){        try{            if(provinciasController.insert(provincias)){              return tru...

Primefaces v13

 La versión nueva de primefaces v13.0 elimina el componente <p:repeat>  Consulte los cambios en  https://github.com/primefaces/primefaces/releases/tag/13.0.0 por lo tanto si necesita una solución similar considere utilizar  <p:carousel>  o  <ui:repeat> En la versión 13 genera una excepción