A partir de la versión 0.29, se implementa el uso de @DeleteMany en Jmoordb-core permitiendo eliminar muchos documentos de una colección.
Asuma que tiene una entidad
@Entity
public class Tarjeta {
@Id(autogeneratedActive = AutogeneratedActive.ON)
private Long idtarjeta;
@Column
private String tarjeta;
@Column
private String descripcion;
@ViewReferenced(from = "user", localField = "iduser")
List<UserView> userView;
@Column
private Date fechainicial;
@Column
private Date fechafinal;
@Referenced(from = "icono", localField = "idicono", commentary = "Esta asociado a la prioridad")
private Icono icono;
@Referenced(from = "tipotarjeta", localField = "idtipotarjeta", commentary = "Ayuda para la implementación de Deep Learning")
private Tipotarjeta tipotarjeta;
@Column
private Long idsprint;
@Column
private Long idproyecto;
@Column
private Boolean backlog;
@Column(commentary = "alta,baja,media")
private String prioridad;
@Column
private String estimacion;
@Column(commentary = "pendiente,progreso,finalizado")
private String columna;
@Column
private Boolean active;
@Embedded
List<Tarea> tarea;
@Embedded
List<Comentario> comentario;
@Embedded
List<Etiqueta> etiqueta;
@Embedded
List<Archivo> archivo;
@Embedded
List<Impedimento> impedimento;
@Column(commentary = "true cuando la crea un colaborador que no pertenece al proyecto y es un proyecto publico")
private Boolean foreaneo;
}
Defina un repositorio, recuerde que CrudRepository implementa el método deleteMauy
@Repository(database = "{mongodb.database1}", entity = Tarjeta.class) public interface TarjetaRepository extends CrudRepository<Tarjeta, Long> { @Lookup public List<Tarjeta> lookup(Search search); @Count() public Long count(Search... search); }
Defina un Controller
@Path("tarjeta")
@Tag(name = "Información del tarjeta", description = "End-point para entidad Tarjeta")
@RolesAllowed({"admin"})
public class TarjetaController {
@Inject
TarjetaRepository tarjetaRepository;
@DELETE
@Path("deletemany")
public Response deleteMany(@QueryParam("filter") String filter ) {
Search search = DocumentUtil.convertForLookup(filter, "", 0, 0);
if (tarjetaRepository.deleteMany(search) == 0L) {
return Response.status(201).entity(Boolean.TRUE).build();
} else {
return Response.status(400).entity("Error " + tarjetaRepository.getJmoordbException().getLocalizedMessage()).build();
}
}
}
En el cliente crear la interface RestClient
public interface TarjetaRestClient {
// <editor-fold defaultstate="collapsed" desc="lookupAuth()">
default String lookupAuth() {
/**
* *
* Leer las configuraciones del archivo microprofile-config.properties
*/
String secretKey = "SCox1jmWrkma$*opne2Amwz";
Config config = ConfigProvider.getConfig();
String userSecurity = config.getValue("userSecurity", String.class);
// or
ConfigValue passwordSecurity = config.getConfigValue("passwordSecurity");
String userDecrypted = Encryptor.decrypt(userSecurity, secretKey);
String passwordDecrypted = Encryptor.decrypt(passwordSecurity.getValue(), secretKey);
return "Basic "
+ Base64.getEncoder().encodeToString((userDecrypted + ":" + passwordDecrypted).getBytes());
}
// </editor-fold>
// <editor-fold defaultstate="collapsed" desc="Response deleteMany(@QueryParam("filter") String filter)">
@DELETE
@Path("deletemany")
public Response deleteMany(@QueryParam("filter") String filter ) ;
// </editor-fold>
}
Crear la interface Services
public interface TarjetaServices {
public Boolean deleteMany(Bson filter);
}
Implementar la interface Services
@ApplicationScoped
public class ProyectoServicesImpl implements TarjetaServices {
// <editor-fold defaultstate="collapsed" desc="Services">
@Inject
TarjetaServices tarjetaServices;
// </editor-fold>
@Override
public Boolean deleteMany(Bson filter) {
Boolean result = Boolean.FALSE;
try {
Integer status = tarjetaRestClient.deleteMany(EncodeUtil.encodeBson(filter)).getStatus();
if (status == 201) {
result = Boolean.TRUE;
}
} catch (Exception e) {
FacesUtil.errorMessage(FacesUtil.nameOfClassAndMethod() + " " + e.getLocalizedMessage());
}
return result;
}
}
En otra clase que implementa la funcionalidad cree el filtro y realice la consulta
Bson filter = and(
eq("active", Boolean.TRUE),
eq("age", 25)
);
tarjetaServices.deleteMany(filter);
Comments