style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">

Rollback en Spring con Hibernate

Buen dia comunidad,

Estoy teniendo problemas al querer hacer rollback en un ws echo en java con spring framework y utilzando hibernate como orm, el ws realiza dos acciones en la BD, primero guarda la cabecera en una tabla y regresa el id que genero, posteriormente usa ese id para insertar en detalles los demas datos como son varios ese metodo de guardar lo tengo dentro de un for, pero los tengo en metodos separados en el business, en el controller es donde los mando a llamar, todos los metodos los tengo marcados con la anotacion @Transactional, pero cuando truena antes al momento de guardar el detalle, no me esta deshaciendo el dato de la cabecera, es decir, el primer save realizado.

Me podrian ayudar de favor, cualquier pista seria de gran ayuda, gracias..

Comparto el codigo:

//Metodo en el controller
        @Transactional
        public ResponseEntity<Void> setChequeraDistribuidor(ChequeraVO vo,HttpServletRequest request){
                Claims claims = (Claims)request.getAttribute(ClaimsEnum.CLAIMS_ID);
                String noEmpleado = claims.getSubject();
                vo.setUsuario(noEmpleado);
                int folioInicial = vo.getFolioInicial();
                int folioFinal = vo.getFolioFinal();
                FoliosId ids=null;
                FoliosDTO folio=null;
                CatestatusFolioDTO estatus=null;
               
                if(!this.sportCheckBO.validaRequeridosChequera(vo))
                        return new ResponseEntity<Void>(HttpStatus.BAD_REQUEST);
       
                if(this.sportCheckBO.validaFoliosValor(new BigDecimal (vo.getFolioInicial()),new BigDecimal(vo.getFolioFinal())))
                        return new ResponseEntity<Void>(HttpStatus.CONFLICT);
               
                if(this.sportCheckBO.validaFoliosAsignar(BigDecimal.valueOf(vo.getFolioInicial()), BigDecimal.valueOf(vo.getFolioFinal())))
                        return new ResponseEntity<Void>(HttpStatus.FAILED_DEPENDENCY);
               
                vo = SportCheckAssembler.asignacionChequera(vo);
               
                Integer idChequera = this.sportCheckBO.setChequeraDistribuidor(vo);
                Integer idEst = 0;
                for (int i = folioInicial; i <= folioFinal; i++) {
                        ids = new FoliosId();
                       
                        ids.setIdChequera(idChequera);
                        ids.setFolio(i);
                        folio = new FoliosDTO();
                       
                        estatus = new CatestatusFolioDTO();
                                               
                        estatus.setIdEstatus(idEst.byteValue());
                       
                        folio.setId(ids);
                        folio.setCatestatusFolio(estatus);
                        this.sportCheckBO.saveFolios(folio);
                }
               
                return new ResponseEntity<Void>(HttpStatus.OK);
        }

//Metodos en el business
       //Metodo que guarda en cabecera
        @Transactional
        public Integer setChequeraDistribuidor(ChequeraVO vo){         
               
                ChequerasDTO dto = SportCheckAssembler.getChequeraAsignar(vo);
                dto = this.chequeraSportDAO.save(dto);
                log.debug(dto.getIdChequera());
                return dto.getIdChequera();
               
        }
       
       //Metodo que guarda los detalles
        @Transactional
        public void saveFolios(FoliosDTO folio){
                this.foliosDAO.save(folio);
        }

style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">