Documento Embebido como Historial

Ejemplo de uso de un documento Embebido para almacenar historial de usuarios

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

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.

La clase UserInfo esta definida dentro del Framework. ejbjmoordb.

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() {
}
}

Desarrollamos una aplicación Java Server Faces

En el controller metodo save()

public String save() {
try {
//Lo datos del usuario
List<Userinfo>  list = new ArrayList<>();
list.add(new Userinfo(loginController.getUsername(), JsfUtil.getFechaHoraActual(), "creacion"));
bodega.setUserinfo(list);
bodegaRepository.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(new Userinfo(loginController.getUsername(), JsfUtil.getFechaHoraActual(), "editado"));
bodegaRepository.update(bodega);
JsfUtil.successMessage(rf.getAppMessage("info.update"));
} catch (Exception e) {
JsfUtil.errorMessage("edit()" + e.getLocalizedMessage());
}
return "";
}//

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.

Editar documento en una lista de embebidos

bodega.getUserinfo().get(1).setUsername("Viejo");
o
Userinfo userinfo = bodega.getUserinfo().get(1);
userinfo.setUsername(
bodega.getUserinfo().set(1, userinfo);
bodegaRepository.update(bodega);

Last updated