首页 > 解决方案 > Spring Boot 一笔交易多回购

问题描述

我正面临这个问题

我有这项服务,有很多存储库。persistBDD() 方法,获取一个包含大量信息的对象,我必须分发信息并将其设置为不同的实体。

我需要在一个事务中保留所有信息。问题是当我在 EmpleoDependiente 中遇到异常时,例如 empleoRepo.save(empleo); Persona 和 PersonaNatural 的数据已经被持久化了,甚至persistBDD 方法也被@Transactional 注释。

谢谢你的帮助。

@Service
public class SolicitudReclamoService {

@Autowired
PersonaNaturalRepository personaNaturalRepo;

@Autowired
PaisRepository paisRepo;

@Autowired
PersonaJuridicaRepository personaJuridicaRepo;

@Autowired
EmpleoDependienteRepository empleoRepo;

@Transactional()
public void persistBDD(registros registro) {

    Persona p = new Persona();
    p.setDenominacion(registro.titular.persona.denominacion);
    p.setIdentificacion(registro.titular.persona.identificacion);
    p.setTipoIdentificacion(registro.titular.persona.codTipoIdentificacion);

    Pais pais = paisRepo.findById(DEFAULT_COUNTRY_CODE).orElse(null);

    PersonaNatural pn = new PersonaNatural();
    pn.setApellidoMaterno(registro.titular.personaNatural.apellidoMaterno);
    pn.setApellidoPaterno(registro.titular.personaNatural.apellidoPaterno);
    pn.setCanal(new Canal("1", null));
    pn.setEstadoCivil(new EstadoCivil(registro.titular.personaNatural.codEstadoCivil, null));
    pn.setFechaFallecimiento(fchFallecimiento);
    pn.setFechaMatrimonio(fchMatrimonio);
    pn.setFechaNacimiento(fchNacimiento);
    pn.setIdentificacion(registro.titular.personaNatural.identificacion);
    pn.setPais(pais);
    pn.setPersona(p);
    pn.setPrimerNombre(registro.titular.personaNatural.primerNombre);
    pn.setSegundoNombre(registro.titular.personaNatural.segundoNombre);
    pn.setSexo(registro.titular.personaNatural.sexo);
    pn.setUsuarioCreacion("TEST");
    pn.setUsuarioModificacion("TEST");

    // empleos
    personaNaturalRepo.save(pn);
    
    if (!registro.titular.empleos.empleo1.identificacion.isBlank()) {
        PersonaJuridica pj = personaJuridicaRepo
                .findByIdentificacion(registro.titular.empleos.empleo1.identificacion).orElse(null);
        if (pj == null) {
            pj = buildPersonaJuridicaEmpleo1Data(registro.titular.empleos.empleo1);
        }
        EmpleoDependiente empleo = buildEmpleo1Data(registro);
        empleo.setPersonaNatural(pn);
        empleo.setPersonaJuridica(pj);
        empleoRepo.save(empleo);
    }

}

private EmpleoDependiente buildEmpleo1Data(registros registro) {
    EmpleoDependiente ed1 = new EmpleoDependiente();
    ed1.setCanal(new Canal("1", null));
    ed1.setCargo(registro.titular.empleos.empleo1.cargo);
    ed1.setEstado("I");
    ed1.setFechaIngreso(formatFecha(registro.titular.empleos.empleo1.fechaIngreso));
    ed1.setSalario(registro.titular.empleos.empleo1.mntSalario);
    ed1.setUsuarioCreacion("TEST");
    ed1.setUsuarioModificacion("TEST");
    return ed1;
}

private PersonaJuridica buildPersonaJuridicaEmpleo1Data(Empleo1 empleo) {
    Persona p = new Persona();
    p.setDenominacion(empleo.razon_Social);
    p.setIdentificacion(empleo.identificacion);
    p.setTipoIdentificacion("R");
    
    PersonaJuridica pj = new PersonaJuridica();
    pj.setActividadEconomica(null);
    pj.setActividadIess(null);
    pj.setCanal(new Canal("1", null));
    pj.setIdentificacion(empleo.identificacion);
    pj.setListaBlanca("N");
    pj.setLlevaContabilidad("N");
    pj.setPersona(p);
    pj.setRazonSocial(empleo.razon_Social);
    pj.setUsuarioCreacion("TEST");
    pj.setUsuarioModificacion("TEST");
    
    return pj;
}

}

标签: transactionsrepositoryspring-transactions

解决方案


推荐阅读