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

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

Jmoordb-Core @UpdateMany y @DeleteMany

 Jmoordb-Core @UpdateMany y @DeleteMany Estoy trabajando en una versión nueva de jmoordb-core en la cual se estará implementando nuevas funcionalidades como lo son @DeleteMany y    @UpdateMany con la finalidad de hacer operaciones sobre múltiples documentos de la colección.