Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

166
Vistas
Insertar en dos colecciones sin bloquear

Actualmente estoy aprendiendo sobre Project Reactor usando Spring-WebFlux.

Creé un servicio simple que se insertará en dos colecciones en una secuencia. En primer lugar, mi servicio se insertará en la colección de listas y luego se insertará en la colección de detalles. Si ambas operaciones tienen éxito, devolverá una instancia de la primera operación (Insertar en la colección de listas), si una de ellas no tiene éxito, revertirá los cambios creados por la operación anterior.

Aquí está mi fragmento:

 override fun insert(business: Business): Mono<Business> = businessRepository.save(business) .doOnSuccess { businezz -> val businessDetails = businezz.businessDetails businessDetails!!.idBusiness = businezz.id businessDetailsService.insert(businessDetails).doOnError { businessRepository.delete(businezz).subscribe() }.subscribe() }

Siento que esta es una forma sucia de crear un Mono. Dado que la segunda operación es una operación de bloque. Por supuesto, podría simplemente hacer una lista de inserción, luego insertar detalles y luego obtener la lista. Pero, esto en realidad llamará a la base de datos 3 veces, en lugar de 2 veces como mi código anterior.

¿Hay alguna forma de que pueda crear una operación sin bloqueo y solo llamar a la base de datos 2 veces?

Gracias.

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

No estoy familiarizado con Kotlin, pero con Java podrías hacerlo así:

 Mono<Business> insert(Business business) { return businessRepository.save(business) .flatMap(businezz -> { BusinessDetails businessDetails = ...; return businessDetailsService.insert(businessDetails) .onErrorResume(throwable -> businessRepository .delete(businezz) .then(Mono.empty())) .then(Mono.just(businezz)); }); }

RESPUESTA DE KOTLIN, gracias David:

 override fun insert(business: Business): Mono<Business> { return businessRepository.save(business).flatMap { businezz -> val businessDetails = businezz.businessDetails businessDetailsService.insert(businessDetails!!).onErrorResume { businessRepository.delete(businezz).then(Mono.empty()) }.then(Mono.just(businezz)) } }
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda